├── README.md ├── arguments.py ├── data ├── readme.md ├── test.txt ├── train.txt └── val.txt ├── modeling.py ├── optimization.py ├── predict_GPU.py ├── server.py ├── tokenization.py └── train_eval.py /README.md: -------------------------------------------------------------------------------- 1 | # TextClassify_with_BERT 2 | 使用BERT模型做文本分类;面向工业用途 3 | 4 | + 自己研究了当前开源的使用BERT做文本分类的许多存储库,各有各的缺点。通病就是面向学术,不考虑实际应用。 5 | + 使用txt、tsv、csv等不同数据集也就算了,有些项目甚至似乎存在bug。所以还是要自己动手解决。 6 | + 已经较为完整可用,欢迎收藏加关注。有问题可提issue交流。 7 | 8 | ## 与同类代码库相比的亮点: 9 | - 在自定义Processor类中添加了针对单条文本的处理方法。在常规的针对test数据集的predict方法之外添加了针对单条数据的类别预测方法。 10 | - 编写了简单的web服务,直接搭建对外服务的API接口。 11 | - estimator 从 tf.contrib.tpu.TPUEstimator换成 tf.estimator.Estimator,以便在 gpu 上更高效运行。于此同时 model_fn 里tf.contrib.tpu.TPUEstimatorSpec 也修改成 tf.estimator.EstimatorSpec形式,相关调用参数也做了调整。 12 | - 在转换成较普通的 estimator 后便可以使用常用方式处理,如生成用于部署的 *.pb 文件等。 13 | 14 | ## 使用方法: 15 | 0. 准备工作 16 | + 首先要下载[BERT-Base中文模型](https://storage.googleapis.com/bert_models/2018_11_03/chinese_L-12_H-768_A-12.zip)或者从[Chinese-BERT-wwm](https://github.com/ymcui/Chinese-BERT-wwm)下载全词mask版本并解压到合适的目录;后面需要作为model_dir配置。 17 | 1. 单机运行 18 | + 在arguments.py中修改运行参数。主要是**数据目录、BERT目录、模型目录、序列长度、batch大小、学习率**等。 19 | > 如果仅对test.txt执行预测,只需要把 do_predict 设为True,do_train 与do_eval 设置为false。 20 | + 训练+评估:运行train_eval.py
21 | > 如果上面步骤进展顺利,恭喜,在输出目录内已经生成了训练和评估结果。屏幕上也打印出了评估准确率等。
22 | + 测试:先修改自己要测试的问题,运行predict_GPU.py
23 | 2. 使用自己的真实数据集。修改训练参数,重新进行训练和评估。 24 | 3. 搭建分类预测服务 25 | + 使用自己的pb模型+[开源框架](https://github.com/macanv/BERT-BiLSTM-CRF-NER)。 【强烈推荐】 26 | + 运行server.py 【仅供玩耍】 27 | + 有pb模型自己使用TensorFlow Serving部署 28 | 4. 关于用bert-base搭建服务的简介: 29 | + 在服务器端、客户端安装:pip install bert-base 30 | + 在PB模型所在目录下新建一个 run.sh文件,写入以下内容: 31 | > bert-base-serving-start \
32 | -model_dir ./ \ # 训练输出目录【主要是其他Mode用到】。
33 | -bert_model_dir F:\chinese_L-12_H-768_A-12 # BERT自身的目录。
34 | -model_pb_dir ./ \ # pb模型路径,就填./ 当前目录就行了。。
35 | -mode CLASS \ # 运行模式,分类就是CLASS
36 | -max_seq_len 200 \ # 最大序列长度。要跟训练时参数一致。
37 | + 运行编写好的run.sh,如果没报错,提示已经开始监听的话就表示服务成功开启。可以使用客户端运行示例了。
38 | 非本机运行的话,构造BertClient时需要设置ip参数,例如BertClient(ip=192.168.20.20 )。 39 | -------------------------------------------------------------------------------- /arguments.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | ''' 3 | @author: yaleimeng@sina.com 4 | @license: (C) Copyright 2019 5 | @desc: 项目执行参数 6 | @DateTime: Created on 2019/7/26, at 下午 02:04 by PyCharm 7 | ''' 8 | import tensorflow as tf 9 | 10 | BERT_BASE_DIR = '/home/itibia/chinese_L-12_H-768_A-12/' 11 | arg_dic = { 12 | "data_dir": './data/', # 数据目录 13 | "output_dir": './output/', # ckpt 输出目录 14 | 'pb_model_dir':'./pb/', 15 | "bert_config_file": BERT_BASE_DIR + 'bert_config.json', 16 | "task_name": 'cnews', # "The name of the task to train. 17 | "vocab_file": BERT_BASE_DIR + 'vocab.txt', # The vocabulary file that the BERT model was trained on. 18 | "init_checkpoint": BERT_BASE_DIR + 'bert_model.ckpt', 19 | # "Initial checkpoint (usually from a pre-trained BERT model). 20 | "do_lower_case": True, 21 | "max_seq_length": 150, 22 | "do_train": True, 23 | "do_eval": True, 24 | "do_predict": False, 25 | "train_batch_size": 32, 26 | "eval_batch_size": 8, 27 | "predict_batch_size": 8, 28 | "learning_rate": 3e-5, 29 | "num_train_epochs": 5, 30 | "warmup_proportion": 0.1, # "Proportion of training to perform linear learning rate warmup for. " 31 | # "E.g., 0.1 = 10% of training." 32 | "save_checkpoints_steps": 100, # How often to save the model checkpoint." 33 | "iterations_per_loop": 1000, # "How many steps to make in each estimator call. 34 | 35 | "use_tpu": False, 36 | "tpu_name": False, 37 | "tpu_zone": False, 38 | "gcp_project": False, 39 | "master": False, 40 | "num_tpu_cores": False, # "Only used if `use_tpu` is True. Total number of TPU cores to use." 41 | } 42 | -------------------------------------------------------------------------------- /data/readme.md: -------------------------------------------------------------------------------- 1 | ## 数据集 2 | 这里通常使用train.txt、val.txt、test.txt表示三个数据集。如果换为自己的实际数据集也建议这样命名,utf-8编码保存。 3 | 4 | 其中格式为(\t分隔符):
5 | + 类标签1 这里是原始句子 6 | + 类标签2 又一个原始句子 7 | + …… 更多的数据 8 | 9 | 具体实例可以参考新闻分类数据集,下载之后改一下数据文件名即可。
10 | 包含"体育、科技、娱乐、家居、时政、财经、房产、游戏、时尚、教育"十个类别,其中train文件50000条,val5000条,test10000条。
11 | 链接:https://pan.baidu.com/s/1ZDez64S9cnzNnucIOrPapQ 密码:vutp 12 | -------------------------------------------------------------------------------- /data/val.txt: -------------------------------------------------------------------------------- 1 | 房产 房企高管年薪任志强最高 本报讯 (记者李宛霖)房地产行业高管们到底一年拿多少钱?23日晚,中国房地产经理人联盟(以下简称“中经联盟”)依据上市公司年报统计数据,对上市公司高管年薪酬进行了TOP 100排名。其中,香港长江实业董事总经理甘庆林以年薪1835万元位列榜首,而华远董事长任志强以年薪774.3万元位居第二,万科董事长王石年薪248.1万元居第六名。中经联盟表示,此次的统计数据全部来源于2009年3月公布的上市公司年报,体现了2008年房地产高管的真实薪酬。进入此次薪酬TOP100排名的房地产上市公司高管中,最高年薪达1835万,最低3.96万元,以北京、上海、深圳等地房企的高管占绝大部分。长江实业董事总经理甘庆林年薪最高,达1835万;华远董事长任志强以774万拿到亚军,第三名是华远总经理孙秋艳,年薪449万元;万科董事长王石年薪248万,排在第六位,万科总裁郁亮年薪206万排在第九位。此外,排在后50名的房地产上市公司高管,年薪基本分布在10万到40万之间,其中排名后十名的房地产老总年薪都不足20万元。最后一名是广州珠江实业(企业专区,旗下楼盘)开发股份有限公司董事、总经理朱劲松,年薪只有3.96万元。中经联盟秘书长陈云峰分析,这体现出,香港的房地产职业经理人与大陆有很大差距,香港房地产业发展了很多年,不少已经成为国际化的房地产公司,整体水平较高,体现在管理人员的薪资上,远远高于大陆。我要评论 2 | 游戏 《实用英汉大词典》登陆天行社区近日,在热闹的天行社区里新出了一款实用型的英文词典软件,不同于传统的实用软件,这里增加了句库句典功能,使得词典实用性大大增强。  本词典除了具有英汉汉英互查功能,还收录了四六级、考研、MBA、雅思、托福、GRE等海量词库,支持高清真人朗读。同时赠送当前流行的“句库”句典,可根据输入的关键词或短语,搜索出常用双语例句。这在其他的工具词典中是绝无仅有的。学习英语在于方法,也许你的单词已经背的滚瓜烂熟了,句法已经掌握到做任何选择题都十分准确,但到具体应用时你发现这些单词词汇怎么也组成不了一句话,句法也不知道该怎么应用了。那么就赶快试试这款软件吧,既能查字典也能查句子,让你在轻松获得更多英语信息的同时,也能体验到学习英语的乐趣。赶快去天行社区中的天行超市下载吧,进入天行超市——软件——教育——实用英汉大词典(赠句库),《实用英汉大词典(赠句库)》将成为你学习英语离不开的好伙伴!资费:5元/次下载路径:天行社区-天行超市-软件-教育移动梦网-软件-教育移动梦网-软件-新品适配机型:MOTO E2、MOTO E398、MOTO E6、MOTO E680、MOTO K1、MOTO L6、MOTO L7、MOTO V600、MOTO V8、诺基亚5500、诺基亚6101、诺基亚6230i、诺基亚7260、诺基亚7370、诺基亚7610、诺基亚E62、诺基亚N73、索爱K300、索爱K506、索爱K700、索爱K790C、索爱S700、索爱W958C、三星D608、三星E258、LG KG90N 3 | 娱乐 赵仁成为新片宣传推迟入伍 否则借此逃兵役(图)新浪娱乐讯 韩国演员赵仁成日前宣布,将入伍日期推迟到了明年3月。赵仁成在11月报名加入韩国空军军乐团,并在11月28日进行了相关体检和面试。他原来计划通过面试后在明年1月19日就入伍服役,但最近赵仁成决定,为了在12月30日首映的影片《双花店》的宣传推迟入伍。赵仁成日前接受采访时表示,因为《双花店》是自己入伍前最后一部作品,因此不想留下遗憾,而且作为主演也有义务积极为影片宣传,因此才决定推迟入伍,并不是害怕参军。据悉,赵仁成的韩国空军军乐团面试结果将于12月26日发布,而赵仁成的最终参军日期也将在之后确定。姜恩真/文 版权所有Mydaily禁止转载 4 | 时尚 组图:网球明星媲美时尚 战场上谁与争锋导言:2011年红土赛季正式打响,也预示着接下来的网坛将全面进入大旺季。红土赛对球员们的体能提出了极高的要求,而欧洲潮湿的天气也意味着球员们在服装挑选上,会花更多心思,需要考虑的方面有很多:款式、颜色、面料都不能少。 1号种子选手纳达尔素有当今网坛“红土之王”称号的纳豆,红土赛自然是他的信心之源,只不过德约科维奇今年超优异的成绩想必也会变成他的压力之源,另一方面,来自费德勒的冲击力也不容忽视。没关系,生机勃勃的绿色给人以希望,黄和绿色的组合,看上去神清气爽。2号种子选手德约维科奇状态神勇的小德本赛季目前还未遭败绩,24连胜也印证了他的成熟。在印第安维尔斯背靠背击败了费德勒以及被他形容为“史上最佳”的纳达尔,也说明他极有可能冲击世界第一,前提是越过纳达尔这道屏障。他以膝盖受伤为由跳过蒙特卡洛,闭关训练。他的球服看起来很像是“龙马”同学的,有木有?3号种子选手费德勒从与科赫尔斯奇雷伯的比赛上能看出费牛显然已经找到了在红土上击球的节奏和手感。费牛出赛着装的关注度丝毫不亚于他的成绩,这也是有道理的。 5 | 体育 拜纳姆:就想随便找个人犯规 不会对自己表现失望新浪体育讯北京时间 5月9日(达拉斯时间5月8日)消息,季后赛第二轮第四场,湖人客场挑战小牛,最终湖人以86-122不敌小牛,遭遇横扫。更为糟糕的是,安德鲁-拜纳姆和拉玛尔-奥多姆双双因恶意犯规被罚出场。一切结束后,湖人的更衣室相当安静。拜纳姆的座位在门口,他也首先接受了记者的采访,谈到被驱逐,他说,“感觉很挫败,而且他们一直在上篮。”在被问到是否对自己感到失望的时候,小鲨有些出人意料的回答:“不,我不对自己失望,事情发生了就发生了,我们很尴尬,但是仅此而已。”至于为什么在落后那么多的情况下恶意犯规,拜纳姆解释道:“我想主要是因为我们很尴尬,他们打垮了我们,我只是想随便对某个人犯规。”狭小的更衣室里,奥多姆身边也同样站满了记者,谈到那个恶意犯规,奥多姆表示:“当时我很尴尬,他们领先了有30分,我没有任何恶意。”奥多姆在禅师身边也打了很多年,谈到最深刻的记忆,他表示:“就是那些瞬间,成为历史的一部分。赢得总冠军,输掉总冠军,还有成为胜者。”[新浪NBA官方微博][新浪NBA湖人新闻动态微博][技术统计][精彩回放][比赛实录](新浪体育 张海彦 发自达拉斯) 6 | 财经 基金钟情另类投资 S股和ST股进入基金法眼证券时报记者付建利高送转、S股和ST股、新能源、周期性反转.....2009年以来,伴随着A股市场的强劲反弹,各种概念性炒作如火如荼,低价股和题材概念股成为带领股指强劲上扬的“先锋队”。一向标榜价值投资的基金,今年一季度却大享“另类投资”的盛宴。“另类投资”大行其道天相投顾的统计显示,今年以来单位净值涨幅前20名的偏股型基金中,除第一名的中邮优选和第十名的中邮成长前十大重仓股大都是蓝筹股外,第二名的金鹰中小盘前十大重仓股中的海南海药、怡亚通等股票几乎全部是今年以来的热点股票,包括中小盘、新能源、4万亿投资主题等。如科力远就因为含有新能源概念,今年以来涨幅高达135.52%,远远超过同期上证综指34.24%和沪深300指数42.79%的涨幅。排名第三的兴业社会责任,其前十大重仓股中就有江苏国泰这只新能源概念的牛股。此外,嘉实主题重仓的南 玻A、金风科技;世纪成长重仓的海南海药、金风科技等股票,均是中小盘股或与新能源有关的题材概念股。反观今年以来净值增长落后的基金,除了建仓谨慎的次基金以外,其他大部分均是重仓蓝筹股的基金。如净值增长仅为10.92%的一只蓝筹风格的基金,前十大重仓股中,就有第十大重仓股丽珠集团外,前九大重仓股全部为银行、煤炭等权重指标股。S股和ST股也入基金法眼统计显示,在目前交易的116只S股和ST股中,前十大流通股中有基金进驻的共计有7只个股。其中,*ST中新最新年报显示,该股前十大流通股股东中,有招商股票、兴业趋势投资、国泰金牛创新共计3只基金进驻。南方稳健成长贰号去年年底持有ST盐湖478.92万股,占流通比为6.23%,成为ST盐湖的第一大流通股股东。光大保德信量化核心、海富通收益增长去年年底也进入*ST上航的前十大流通股股东之列。此外,华夏大盘精选以589.71万股的持有量在去年年底成为ST中源的第三大流通股股东,占流通比为2.79%。在未股改概念板块中,根据最新的2008年年报,共计有三只个股前十大流通股股东中有基金进驻。截至去年年底,S仪化的前十大流通股股东中,就有中邮核心优选持有1237.69万股,一直对S股情有独钟的东方精选也紧随其后,持有S仪化401.98万股。S佳通的前十大流通股股东中,东方精选以1252.01万股的持有量成为第一大流通股股东。S上石化更是成为基金的大本营。东方精选重仓持有7942.24万股,占流通比为2.60%。此外,上投摩根中国优势、嘉实沪深300、博时裕富也分别进入S上石化前十大流通股股东之列。 7 | 时尚 组图:街拍大肚奥尔芭又曝怀孕 小�娃晋升姐姐导语:大喜讯!杰西卡-奥尔芭(Jessica Alba)在她的Facebook主页上宣布自己怀孕了!“小?娃”奥娜-玛丽-华伦 (Honor Marie Warren) 要当姐姐咯。“芭姐”说自己和老公卡什-沃伦(Cash Warren) 非常兴奋地想和大家分享,而且直接告诉大家这个好消息。这是杰西卡-奥尔芭 (Jessica Alba) 首次公开再次怀孕的消息哦。 “芭姐”还感谢朋友和粉丝对她第一次怀孕时的帮助和支持,这一次同样会感谢大家。卡什-沃伦 (Cash Warren) 随后也在Twitter上分享了这个喜讯,并感谢朋友们的祝福。现年29岁的杰西卡-奥尔芭 (Jessica Alba) 和卡什-沃伦 (Cash Warren) 的第一个女儿奥娜-玛丽-华伦 (Honor Marie Warren) 在2008年诞生,因为无敌可爱的“?样”被报友们昵称为“小?娃”。 “芭姐”的第二个孩子是男孩还是女孩呢?TA会是“小?娃”二号吗?一起期待并祝福吧!从英国回到美国洛杉矶的杰西卡-奥尔芭 (Jessica Alba) 和女儿奥娜-玛丽-华伦 (Honor Marie Warren) 在2月16日一起出街。“芭姐”有没有孕味了呢? 8 | 财经 净值大反弹触发基民调仓冲动⊙本报记者 吴晓婧行情持续演化。4月以来,上证指数连续冲破2400点、2500点关口后,震荡加剧。面对相对高位的市场大震荡以及偏股型基金净值的迅速反弹,在去年大熊市中一度选择坚守的广大基民会有怎样的抉择?是“持基待涨”,还是“逢高离场”?对此,《基金周刊》记者走访了一些基金销售渠道,对目前点位下基民持基心态作了一番调查。高位震荡下的“围城”效应进入4月份,基金申赎呈现出新特征,“围城”效应凸显。记者上周走访了上海浦东部分银行的基金销售渠道发现,在赚钱效应的吸引下,一方面,涌现出一批投资者首次萌发申购基金的想法,但由于市场处于相对较高点位而不敢贸然进场,大多数处于持币观望阶段。另外一方面,曾经在大熊市中被套,目前已经解套或者接近解套的基民,其“落袋为安”心态日益凸显。“在这个点位想要申购偏股型基金的投资者,我们一般建议其进行定投,或者等行情再明朗一些之后作决定,毕竟后市如何演变谁也说不清楚。”上海浦东东方路上一家银行的理财经理对记者如此表示。事实上,4月份以来的基金开户数逐步回落,也说明基民目前追高意愿不强。3月份基金开户数大幅走高后,4月份则从高位开始回落,前一交易周,基金开户数仅为3.24万户,是近9周以来基金单周开户数最低的一周。记者从多数银行理财经理了解得知,最近投资者咨询最多问题就是在这个点位是否适合购买偏股型基金,已经解套或接近解套的基金是否应该赎回?已有部分投资者对解套或者即将解套的基金进行了赎回,另有部分投资者赎回了今年业绩落后的偏股基金转而申购绩优偏股基金。此外,记者从深圳、上海以及广州等基金公司了解到,虽然个别绩优偏股基金处于净申购状态,但整体来看,净赎回仍是偏股型基金的主基调。几家规模较大的基金公司均表示,旗下大多数偏股型基金近期均处于净赎回状态。基金公司参与上市公司定向增发使得其今年以来的份额变化露出“冰山一角”。根据力源液压公告,3月30日4家基金公司旗下18只开放式偏股型基金参与了该公司定向增发。计算得出,上述基金今年以来遭遇净赎回的基金达到了9只,总计净赎回28.3亿份,另外9只基金总计净申购21.8亿份,整体来看,申购赎回基本平衡。而到了4月中旬,根据云南城投公告,4家基金公司旗下15只开放式偏股基金参与了该公司定向增发。截至4月14日,上述15只开放式偏股型基金中,除1只基金申赎基本平衡外,遭遇净赎回的达到了12只,占比达到8成,总计净赎回达38.3亿份。仅2只偏股型基金为小幅净申购,共计净申购仅为4.3亿份。整体来看,出现了明显的净赎回。对比上述数据可以看出,进入4月份,当上证指数连续冲破2400点和2500点关口后,偏股型基金遭遇净赎回正逐渐成为主基调。而从最新披露的基金1季报局部数据来看,1季度股票型基金处于小幅净赎回。此外,上周中国证券网进行了“市场突破牛熊分界线,您的投基策略有何变化”的调查结果显示,参与投票的基民中,36.14%的基民表示持有的基金已经大幅减亏、准备赎回,成为所得票数最多的一个选项。由此可见,目前部分基民心态已经由“持基待涨”向“落袋为安”转变。绩优偏股型基金获得青睐整体来看,偏股型基金遭遇净赎回或成主基调,但个别绩优偏股型基金依然获得了资金的青睐。例如,在混合偏股型基金中,涨幅最大的金鹰中小盘精选,截至上周五,今年以来其涨幅已达46.06%。金鹰基金表示,4月份以来,申购和赎回比例大概是在7:3,每天申购份额都在3000万以上,目前规模已经超过10亿份,值得注意的是,2008年末该基金份额仅为1.74亿份。事实上,基金申赎的“围城效应”在金鹰中小盘这只基金上表现得相当突出。金鹰基金表示,已经解套的老基民“落袋为安”心态迫切,因此老的基金持有人基本上已经进行了赎回,现有的持有人基本上都是新进来的,多数处于盈利状态。金鹰基金旗下的金鹰红利价值灵活配置今年以来净值涨幅已达39.30%,远高于同类型基金的涨幅。据悉,该基金为一只次新基金,于2008年底成立,成立时规模偏小,仅为3.67亿份。金鹰基金表示,近期该基金一直处于净申购状态,每天申购份额基本上是5、6千万左右,赎回份额正常情况下一般不超过200万。业绩一直靠前的华夏大盘精选,虽然一直暂停申购、转换转入业务以及定投业务,但从该基金参与云南城投曝光的份额数据来看,今年以来的份额基本与去年底持平。此外,随着市场的持续转暖,偏股型基金重现“限购令”。上投摩根上周公告称,旗下中小盘股票基金定于4月20日起开始办理申购业务。但该基金本次开放申购不同于以往,将对单个基金账户持有上投摩根中小盘基金的金额进行限制:如申购或转入申请使单个基金账户持有本基金金额超过上一季度末本基金资产净值的5%,超过部分的申购或转入申请将不予确认。此举在业内开了先河。此外,兴业全球基金4月8日公告称,暂停接受对兴业社会责任股票型证券投资基金的单笔金额10万元以上申购、转换转入申请,且单个基金账户单日累计申购及转换转入金额不得超过10万元。中邮基金旗下中邮核心优选基金为今年以来股票型基金中涨幅最大者,截至上周五,该基金今年以来净值涨幅已达54.25%。该基金3月末虽然恢复日常申购业务,但打开申购的时间也仅3天。基金限购通常是牛市中出现的场景,那么目前部分股票型基金出现限购情况意味着什么呢?分析人士认为,限购措施除了为保证基金净值不要出现太大的波动外,震荡市中规模偏小的基金更有利于基金经理管理,这也侧面反映出基民对于绩优基金的偏好。固定收益类产品风光不再进入2009年,市场依稀呈现出一点牛市氛围,在偏股型基金赚钱效应不断凸显,固定收益类产品收益率大幅下降之后,熊市中的“避风港”对于资金的吸引力已大幅下降。资金的“逐利”特性使得高风险基金品种与低风险基金品种间的“跷跷板”不断凸显。曾经“无限风光”的固定收益类的基金产品在今年则显得“黯然失色”。从记者调查的上海、深圳以及广州逾10家基金公司各类产品的申赎情况来看,去年4季度份额增长最大的货币市场基金正成为近期遭遇赎回的最大品种。多家基金公司均表示,进入4月份,旗下货币市场基金平均每天净赎回上千万份,这与去年4季度的情形形成鲜明对比,2008年4季度,货币型份额增长高达2260.29亿份。从目前公布1季报的16家公司来看,1季度货币市场基金遭遇了大比例赎回,总计净赎回达到614.57亿份,净赎回比例为51.76%。事实上,去年4季度至2009年1月初,部分货币型基金还频发“限购令”,而4月以来,随着货币市场基金收益率下滑,已有包括申万巴黎收益宝货币市场基金、华夏现金增利基金、大成货币市场基金和泰达荷银货币市场基金在内的4只货币市场基金表示,大额申购及转换转入对基金资产运作的影响已经减弱,因此取消或放松对大额申购的限制。从记者走访浦东部分银行的基金销售渠道来看,多数理财师表示,股市回暖是基民赎回货币市场基金的最为直接的原因,当初大部分基民申购货币市场基金就是为了等待股市回暖后将资金重新投入到股市中或者申购偏股型基金。事实上,今年以来,由于货币基金持有央票大量到期,货币基金面临可投资品种减少,且再投资收益率大幅下降的情况,因此,货币基金收益率与去年相比大幅下滑,加之股票市场逐步回暖,货币市场基金对于投资者的吸引力自然无法与2008年大熊市相比。此外,去年“一枝独秀”的债券型基金近期依然面临着不小的赎回压力。多家基金表示,随着市场的持续反弹,目前债券型基金赎回量也有所放大,其赎回压力仅次于货币市场基金。而从目前公布一季报的16家公司的申赎数据来看,债券型基金一季度净赎回为131.54亿份,赎回比例为29.55%,成为赎回比例第二大的基金品种。 9 | 时尚 组图:《将爱》热映 徐静蕾新旧造型大PK 导语:12年前的电视剧《将爱》获得了年轻一代的认可和共鸣。现由徐静蕾、李亚鹏等原班人马打造的同名电影《将爱情进行到底》再一次牢牢锁住了70后、80后这两代人的目光。回顾荧幕形象,由老徐出演的女主角在经历了这么些年的感情颠簸之后,发生了怎样的变化?电视剧中文慧学生时代造型,多以清纯百变的发型登场亮相。两根马尾造型令人印象深刻。偶尔也用头巾扎在头上做装饰。以当时的时尚,演绎一个大学女生的形象。 10 | 时尚 组图:潮流风尚标 男人V领更性感导语:在Style.com的Tommy Ton米兰男装周街拍特辑中,来自世界各地的时髦男士们无论年龄大小,都爱穿着V领的针织衫于西装内,或解开衬衫的几粒纽扣显出“人造”的V领款式。V领素来都是女性们展现性感魅力的法宝,其实对男士们又何尝不是呢?作为时尚风尚标的设计师本人穿衣风格,John Galliano就时常以深V领亮相或于T台谢幕。当然,他同样喜欢将此元素运用在自己品牌的男装系列中。在春夏的T台上,无论是西装里的针织衫、短风衣里的T恤,还是单薄的背心,都有V领的款式,且一如既往具有G式的野性魅力,却不轻佻,而John Galliano在此发布秀谢幕时穿的就是V领背心。当然V领并不如印象中的“痞子制服”, agnes b。双色领针织+一粒钮西装的组合显出双V的层次感,青春而文雅;Dior Homme的半袖窄翻领的开口更低,颇具阳刚之气;Hermes的卡其色V领上衣因其柔软的材质而反添了几分优雅温柔气质。而对自己身材颇为自信的男士可效仿Dsquared2的秀场案例,将西服内的衬衫多解开几个钮,形成深V的姿态,最为性感撩人。 11 | 财经 QFII一季度跑赢国内股基 整体规模增幅超一成每经记者 李娜 发自上海今年一季度的小牛市行情,使得投资者对赚了钱的国内基金重拾信心,而理柏最新的研究数据却显示,与QFII的牛年开局相比,国内基金无疑又是棋差一招。同时,数据显示,QFIIA股基金3月总资产规模初值达到了77.15亿美元,较去年12月时的69.49亿元增长了11.02%。QFII一季度跑赢国内股基理柏最新研究数据显示,已公布准确数据的9只QFIIA股基金,3月整体平均业绩大幅增长13.60%。其中,保德信中国基金,标智沪深300中国指数基金及iShare新华富时A50中国基金表现最佳,3月业绩分别上涨了20.65%,15.69%及14.41%。同时,从各种类型的QFIIA股基金来看,单纯追踪指数的被动式管理QFIIA股基金上月平均业绩大幅增长15.05%,领先主动式管理QFII基金平均业绩13.18%。另据Wind统计数据来看,3月国内表现最好的当属开放式股票型基金,开放式股票型基金3月净值平均涨幅为11.82%。同时,理柏的数据显示,在牛年一季度QFIIA股基金也整体跑赢国内开放式股票型基金。统计显示,QFIIA股基金今年一季度平均上涨了27.16%,有4只基金的涨幅都超过了30%。表现前三名基金为标智沪深300中国指数基金、APS中国A股基金及iShare新华富时A50中国基金,今年一季度的涨幅分别为34.81%、32.03%和30.55%。数据显示,主动型首季平均业绩表现增长32.51%,优于被动型的25.38%。而有关数据显示,国内开放式股票型基金今年一季度的涨幅不到25%。毫无疑问,QFIIA股基金又在年初以来的小牛市中赢了一回。QFII资产规模大幅提升同时,据理柏最新的QFII资产数据分析,QFII的投资热情反向加温。QFIIA股基金3月总资产规模初值达到了77.15亿美元,较2月的68.53亿美元增加了12.58%,较2008年12月时的69.49亿元增加了11.02%。另据资料数据显示,QFIIA股基金1月总资产规模为75.75亿元。在所有可得6只已公布资产数据的QFIIA股基金当中,多数基金资产规模明显增加,其中又以日兴中国A股基金2号资产规模增幅最高,达23.43%,净申购增幅亦以12.01%居冠。理柏表示,QFIIA股基金的规模上升和A股今年以来牛气冲天的表现是密不可分的。牛年以来,海外资金开始对相关国内A股市场的投资大力追捧。而在其中最受瞩目者,当属日本大和投资信托于去年12月获得1亿美元的QFII投资额度后,在日本所发行的大和中国A股基金,受到日本当地广大投资者的追捧,并提前于3月18日以295亿日元成立,约合3亿美金,其中的1亿美金将用于投资A股,其余2亿美金则将投资于B股、H股等。 12 | 房产 潘石屹:一年内将是楼市低点 投资转向烂尾楼昨日,SOHO中国(企业专区,旗下楼盘)与招行北京分行签订《战略合作协议》,招行北京分行将向SOHO中国提供不超过人民币100亿元的综合授信额度。SOHO中国董事长潘石屹(潘石屹博客)表示,该资金将主要用于项目收购。 潘石屹表示,鉴于目前土地市场价格相对较高,而一些受经济危机影响的烂尾楼价格相对更低,公司今后的资金投向重点将放在烂尾项目收购上。 他认为,今后一年左右的时间内,将是中国内地房地产业的低点,同时目前又面临通货膨胀的压力,在此期间收购低价项目,实现资金的保值增值是公司的首要战略。 我要评论 13 | 体育 湖人vs小牛前瞻Ⅳ:科比拒绝横扫 振臂为禅师而战 新浪体育讯北京时间5月8日消息,菲尔-杰克逊的教练生涯会有怎样的一个结局?他让迈克尔-乔丹、科比-布莱恩特和沙奎尔-奥尼尔都实现了冠军梦,可他自己却可能以被横扫来告别。如果“禅师”想要避免这种尴尬,洛杉矶湖人队就必须要在明天凌晨的西部半决赛第四场中赢球,这样才能避免被横扫的结果。作为两届卫冕冠军,湖人队以0比3落后给德克-诺维茨基领军的达拉斯小牛队。虽然总比分占据压倒性的优势,但小牛队并不是完全统治了系列赛,他们只是在第四节发挥得更好,第一场和第三场都是逆转取胜。科比知道球队剩下的时间不多了,但他并没有放弃的意思,他明确表示相信球队有机会翻盘。杰克逊的话也很简单,“我告诉球员们不要去考虑被横扫,只去考虑赢下明天的比赛,把比赛再带回到洛杉矶。”NBA历史上出现过98次的3比0,其中有59支球队被横扫,没有一支球队能够实现翻盘。在杰克逊的教练生涯里,他11次率队夺冠,此前20年季后赛只输掉过九个系列赛,他还从没有经历过0比3落后。科比生涯里两次被对手横扫,自从1999年后就没有出现过,毫无疑问,好胜的性格将会激发出科比更多的斗志,他肯定会表现出更强的进攻欲望。对湖人队来说,仅仅依靠科比一人是不够的,这在第一场已经充分得到证明。安德鲁-拜纳姆和保罗-加索尔都需要挺身而出,第三场中拜纳姆打得足够出色,他要保持内线的统治力,而加索尔要用更强硬的表现去甩掉“软蛋”的帽子。2008年总决赛后加索尔遭到各方指责,他随后两个赛季用表现证明了自己,他所需要的就是重现自己强硬的表现。罗恩-阿泰斯特将在禁赛一场后复出,如果他仍旧找不到外线的投篮手感,那么湖人队的前景仍不乐观。对于小牛队来说,他们自然希望尽早结束系列赛,不能给湖人队任何喘息的机会。避免回到洛杉矶就能给诺维茨基、38岁的杰森-基德赢得更多的休息时间,这也会更利于他们接下来的季后赛之旅。诺维茨基在这个系列赛中投篮手感奇佳,他在进攻中给湖人队带来足够的杀伤,队友们也能把他的传球投进,进攻的多点开花是小牛队3-0领先的一大关键,明天在主场他们要争取保持手感,杰森-特里、佩贾-斯托贾科维奇和基德都要给诺维茨基足够的进攻支持。泰森-钱德勒在队伍中同样发挥重要作用,他在内线防守、篮板和挡拆掩护上都扮演极为重要的角色,他要继续用防守来阻击湖人队的内线。如果要挑选一支有望实现0比3逆转的球队,杰克逊、科比和他们的湖人队或许非常合适,小牛队也有季后赛崩盘的先例。2006年NBA总决赛小牛队在2比0领先的情况下被逆转,2003年他们在3比0领先的情况下被开拓者队拖入第七场决战,而本赛季早些时候,他们也曾在最后14分钟挥霍掉23分领先。这之后他们就再没有输过球,已经连赢五场,他们的攻守都有了明显的进步。预计双方首发阵容湖人队:费舍尔、科比、阿泰斯特、加索尔、拜纳姆小牛队:基德、史蒂文森、马里昂、诺维茨基、钱德勒(Melody) 14 | 家居 福州阳光花卉(图)福州阳光花卉: 最佳花礼设计奖、最佳品牌推广奖最佳花礼设计奖:今年花卉资材市场上出现了一种很特别的包装材料——“阳光纱”,福州阳光花店就是“阳光纱”的开发者,在七夕中国情人节中,突显出浓郁中国味的中国传统服装元素花束包装也是阳光花店最早一批使用者之一.福州阳光花艺多年来致力于花艺学习和花礼的创新,甚至在1997年,花礼盒还不被大家所熟知的时候,阳光花艺就创作出花礼盒这种花礼设计产品。福州阳光花艺始终走在花礼设计的前列,经营者万力坦言,不怕产品被模仿,因为他们保有的创新精神才是最可宝贵的财富。图为 阳光花艺连锁店面之一图为 温馨的花礼盒设计图为 羽毛制作的情人节花束 让人联想了洁白的婚纱图为 自然感十足的木制礼盒,承载着节日的问候和祝福,当你打开时会不会惊喜的叫道:哇 好可爱呦最佳品牌推广奖:阳光花艺成立于2001年,但其前身“阳光花艺工作室”早在1991年就已诞生,阳光花艺的商标图案“花朵”造型设计有着深刻的设计寓意,内圆中心的两片叶子代表 “阳”字拼音字母开头 “Y”字同时也代表着萌芽,叶子下方曲线代表大地及生长萌芽的树杆,叶子上方的 “G”代表 “光”字拼音字母的开头,也代表太阳和花朵。在花店商标保护尚未被业界所重视的2000年前后,阳光花艺便在国家工商总局成功注册了“阳光花”商标权保护。对于商标价值的超前认知使得“阳光花艺”这个当地名牌得到了法律保护。在十几年的经营活动中,阳光花艺始终将“阳光花”商标最为推广重点,目前经营的三家直营店,大到店面设计小到小小的一个包装,阳光花商标一直被有意凸显。这种长年的坚持使得“阳光花”成为福州当地花卉消费的一个“知名品牌”。 15 | 教育 四六级剩5分钟还两篇阅读没做怎么办(2)第二篇:各类题型干扰项特点新闻记者理解题一般采用主旨大意题、事实细节题、判断词汇题、逻辑推理题、作者观点态度题五种形式。考生若掌握了这些题型干扰项的特点,也有助于帮助自己排除干扰项,做出正确地选择。(一)主旨大意题干扰项特点。(1)虽覆盖全文意思,但显得太笼统;(2)其内容太窄,不能覆盖全文内容,只是文章内容的一部分,或只是文章内容的一个细枝未节;(3)与文章内容毫不相干,或与文章内容相悖。例(1) The author write this passage to _____ 。(1995年6月六级题30)A. discuss the negative aspects of being attractiveB. give advice to job-seekers who are attractiveC. demand equal rights for womanD. emphasize the importance of appearance(分析:文章中心意思是讲漂亮对女性的不利影响(But in the executive circle, beauty can become a liability。)但B项表达的意思偏离了主题(不是提供建议),且不是对所有外貌有魁力的人而言的;C项内容太笼统,太宽,不是讲女权平等;D项内容与文章主旨相反。故选A项。)(二)细节题干扰项特点。(1)与原句内容相反;(2)与原文内容一半相同一半不同;(3)与原句内容相似但过于绝对化;(4)原文中根本没提到。例(1) According to the passage, which of the following statement is TRUE?(1996年1月六级题35)A. Future man will be made of silicon instead of flesh and blood。B. Some day it will be difficult to tell a computer from a manC. The reasoning power of computers has already surpassed that of man?D. Future intelligent life may not necessarily be made of organic matter。(分析:此题是一个细节判断题。A项与原文内容相反,过于绝对化,原文是说由硅材料构成的计算机可能成为一种新的智慧生命,并不是说已经是。B项内容原文中根本没提到。C项说计算机的推理能力目前已超过人类,但原文内容只是说到90年代,第6代计算机的问世,其推理能力才与人类的大脑相匹配,而不是已超过,故与原文内容有出入。因此答案是D项。)(三)逻辑推理题干扰项特点(1)不是在文章事实或上下文(句)逻辑基础上进行推理而得出了观点。(2)虽然可以以文章提供的事实或内在逻辑为基础进行推理,但推理过头,概括过度。例(1) It can be inferred from the passage that earlier generations didn't realize _____ 。(1993年6月六级题27)A. the interdependence of water, soil and living thingsB. the importance of the proper land useC. the harmfulness of soil destruction and river floodsD. the extraordinary rapid growth of population(分析:此题属从事实描述的基础上进行推理。短文主要讲了"环保是我们生活的一部分"。地下水位的重要性以及保护植被对保护源头的意义和充分利用江河中的水资源的意义。而文章开头就提出一种观点"我们要着手弥补先辈们的错误。"由此可推断出早期先辈们没有意识到水、土地、生物之间的相互依存关系,选A项。B、C项推理出的观点太窄,不能概括整段中心,D项短文中根本没提到。)例(2) It can be concluded from the passage that the introduction of electronic media into the world of music _____ 。(1996年1月六级题24)A. has brought about an information revolutionB. has speeded up the advent of a new generation of computersC. has given rise to new forms of music cultureD. has led to the transformation of traditional musical instruments(分析:短文中句电子媒体本身是"信息革命"(information revolution)的一部分,而A项说"导致、带来"(brought about)信息革命,属推理过头。文中还谈到计算机本身是一种电子媒体,而这种媒体又是音乐物质文化的一个更为重要的部分,而B项"加速新一代计算机的产生"从逻辑上推不出来。D项说导致了传统乐器的变革,而文中根本没提到"traditional musical instruments"属不在事实基础上进行揄,故错。因此,选项C才是正确答案。)(四)观点态度题干扰项特点纵观历届四、六级阅读理解试题在考查学生揣测作者观点态度时,正确选项要么是肯定、赞扬、褒义性的(如positive, support, useful, interesting, admiring等)要么是否定、批评、贬义性的(如disgust, critical, negative, disappointment等)而又以否定、贬义性居多。所以此类题型中的中性词(如indifferent, ambivalent, neutral, humor, disinterested, impassive)一般均为干扰项。由于近几年文章都是反映与社会联系紧密的,多为人们所担心的现象,故作者对这些社会现象持批评态度的较多。例(1) The author's attitude toward the communications revolution is _____ . (1998年 6月六级题25)(分析:答案是(B)critical 其它选项(A)positive, (C)indifferent, (D)tolerant均为干扰项。)例(2) What the last paragraph tells us is the author's _____ . (1998年1月六级题30)A. detailed analysis of the ways of raising poultry in BangladeshB. great appreciation of the development of poultry industry in Bangladesh。C. critical view on the development of the poultry industry in BangladeshD. practical suggestion for the improvement of the poultry industry industry in Bangladesh。(分析:答案选C。表明作者的批语态度。)例(3) The author's attitude towards the speaker's remarks is _____ 。(1996年1月四级题68)(分析:正确答案为(C)critical, 其它选项(A)neutral, (B)positive, (D)compromising 均为干扰项。) 16 | 财经 次新基金落袋为安荆楚网消息 (楚天都市报) 统计显示,4月份以来先后有20只基金实施分红或公布分红方案,按照年初的基金份额计算,这20只基金合计分红总额达到39.53亿元,远远超过一季度基金26.56亿元的分红额。与之前以债券基金、货币基金等低风险产品为主的分红状况不同,这一次,偏股型基金开始占据分红的“主导权”。特别是去年成立的次新股票基金,赚钱后陆续实施分红计划。比如,易方达中小盘基金就在今日每10份派发红利0.40元。国投瑞银认为,基金扎堆分红,表示他们对二季度股市持谨慎态度,抱有落袋为安的心理。(新闻晨报) 17 | 体育 探花郎临危受命拯救灰熊 盖伊报销这奇兵早该首发新浪体育讯在灰熊内线进攻被遏制的时候,灰熊的外线能站出来的人并不多。在没有鲁迪-盖伊的时候,O.J.-梅奥就成了灰熊外线第一单打手,这场比赛的下半场他就临危授命以首发出场。梅奥今天的表现不错,第一节结束前他还和格雷维斯-瓦斯奎斯联手快攻压哨打成。瓦斯奎斯先是瞅准了凯文-杜兰特的传球路线,断球之后他和梅奥一路快下,一个标准的二打一快攻配合,梅奥上篮成功之后第一节结束的红灯也随即亮起。第一节梅奥仅仅上了不到三分钟,这么短的时间内他就拿到了8分,这样的表现也征服了灰熊主帅莱昂内尔-霍林斯,于是他决定让梅奥在下半场担当首发。这是霍林斯本场比赛祭出的第二次阵容变化,看得出来他也想用一些变化来争取胜利。梅奥全场比赛仅仅18投6中拿到18分,这样的数据显然表现不出他在本场比赛发挥的作用。灰熊前三节落后13分,第四节一上来他们打出小高潮以后,分差一直在8-10分之间徘徊。这个时候是梅奥打破了僵局,他先是命中一记抛投,然后一记三分让灰熊打出了12-2的高潮,最终追上了比分。梅奥的表现称不上完美,但是他却是灰熊完成大逆转的大功臣。现在甚至可以把梅奥称作灰熊最重要的外线球员,他的关键球能力对灰熊弥足珍贵。在今天的大逆转里,灰熊并没有哪个球员表现特别突出。在内线被严防死守的情况下,灰熊稍逊一筹的外线人人争先的跳了出来,梅奥就是其中最闪耀的一人。除了18分以外,梅奥还拿到了6板4助攻2抢断2盖帽的全面数据。这场比赛梅奥在下半场首发出场,然后灰熊完成了最大分差为16分的大逆转。梅奥首发的时候,灰熊的内外线进攻才更加平衡,或许保持这个首发阵容才会让灰熊走得更远。(二六八) 18 | 娱乐 盖-里奇走出离婚阴影 打造时尚版福尔摩斯(图)东方早报记者 程晓筠 编译核心提示:英国先锋女导演萨莉-波特聚焦时尚世界的新片因为裘德-洛的男扮女装而备受瞩目,华丽的图景背后,《愤怒》的枪口真正的指向,其实是互联网产业以及名利场对人性的吞噬。英国先锋女导演萨莉-波特聚焦时尚世界的新片因为裘德-洛的男扮女装而备受瞩目,华丽的图景背后,《愤怒》的枪口真正的指向,其实是互联网产业以及名利场对人性的吞噬。由盖-里奇导演、小罗伯特-唐尼和裘德-洛主演的《夏洛克-福尔摩斯》自从去年12月开拍以来就备受关注。在先期曝光的片场工作照中,小罗伯特-唐尼扮演的福尔摩斯没有头戴英式的高礼帽,也没有身穿标准的三件套西装,而是围着条纹领巾,胡乱套了一条萝卜裤,宛如一个杂耍艺人。近日,《夏洛克-福尔摩斯》剧组终于公布了演员正式的定妆照,并接受了媒体的访问,展示这位“另类福尔摩斯”的冰山一角。影片 挖掘出被隐匿的波希米亚艺术家和诗人历史上最著名的福尔摩斯是由英国演员巴兹尔-雷斯伯恩塑造的,他在1940年代出演了10多部福尔摩斯的系列影片,他的俊朗的外表和绅士派头十足的行事风格深入人心,被当成是扮演“福尔摩斯”的标杆。不过,《夏洛克-福尔摩斯》的主创人员并不打算向巴兹尔-雷斯伯恩看齐。制片人莱昂内尔-威格拉姆表示:“爱德华七世时代彬彬有礼的绅士实在叫人厌倦,那可不是我们设想中的福尔摩斯。”他认为,福尔摩斯应该能文善武,不但观察细致入微,而且身手了得。另一位制片人乔尔-西尔弗则将该片中福尔摩斯定义为“1891年的詹姆士-邦德”,他能从鞋子上的灰尘判断涉案人员的行踪,抓获罪犯时,也会报以一顿老拳。至于新版福尔摩斯是否会与阿瑟-柯南-道尔爵士笔下的主人公相去甚远,熟读原著小说的威格拉姆认为,从福尔摩斯热衷于英式格斗,他的搭档华生医生嗜好拳击和决斗等蛛丝马迹中都可以看出福尔摩斯和华生不但智慧过人,他们同样也是动作英雄。威格拉姆说:“在柯南-道尔的字里行间中留下了许多暗示,我们现在有技术、有资金、有手段,可以挖掘出被隐匿的福尔摩斯和华生。我们创造的福尔摩斯更现代,行为习惯上像个波希米亚人,而穿着上则像个艺术家或者诗人。与以往任何的福尔摩斯都不一样。”《夏洛克-福尔摩斯》剧本由迈克尔-约翰逊、安东尼-佩卡姆和盖-里奇共同完成。威格拉姆解释说:“影片涵盖的内容比柯南-道尔描写的任何单个故事都要多得多,案情更错综复杂。”至于福尔摩斯嗜好毒品的情节是否会在片中出现,威格拉姆做出了否定的回答,因此他认为《夏洛克-福尔摩斯》是一部适合家庭观看的影片。导演 盖-里奇走出离婚阴影在结束与麦当娜离婚判决之后,导演盖-里奇全身心地投入到了《夏洛克-福尔摩斯》的拍摄中,闲来还常常在片场的角落里抱起吉他弹奏作乐,看上去并没有受到婚变的影响。这位以《两杆大烟枪》、《偷拐抢骗》等片走红影坛的英国导演素来以风格鲜明著称,他的作品往往令好莱坞同行瞠目结舌,那些习惯高片酬的好莱坞大腕甚至不惜降低片酬以期在他执导的影片中扎上一角。黑色的犯罪题材、人物卑微的身份、语速极快的对话、迅速的场景穿插都是盖-里奇的看家本领,而在《夏洛克-福尔摩斯》中,他保留了这些特点,从影片的许多场景安排在下水道和监狱里拍摄就可窥一斑。向来要求颇高的盖-里奇对于目前拍摄的进展很满意,他说:“我有什么要求,剧组都可以办到。”而影片的演员也对盖-里奇赞誉有加,裘德-洛表示:“你知道维多利亚时代的伦敦就像是世界的臭水坑,到处都是罪犯和坏蛋。盖-里奇为这部电影带来了活力,对于片中打斗的动作,他也能给出专业的指导。”作为导演的盖-里奇,更像是一个赌徒,所以他也有输的时候,比如去年上映的影片《摇滚黑帮》,虽然在英国取得了不错的口碑,但是在美国的总票房仅为570万美元。不过,这并没有影响《夏洛克-福尔摩斯》的制片人对他的信任,制片人西尔弗说:“我们认为里奇有能力执导一部引人入胜的大制作,更何况影片的主演还是小罗伯特-唐尼。”演员 福尔摩斯“能打” 华生“时髦”本来,盖-里奇打算复制英国导演克里斯托弗-诺兰“复活”《蝙蝠侠》系列电影的模式,将故事情节设定为福尔摩斯从少年成长为青年的重要阶段,但是当他看完了小罗伯特-唐尼主演的《钢铁侠》后,立刻决定把福尔摩斯塑造成身手和头脑同样敏捷的“动作英雄”。演员和扮演的角色之间往往存在着某种内在的联系。和福尔摩斯一样,小罗伯特-唐尼曾经也沉溺于可卡因,备受毒瘾的折磨;福尔摩斯擅长英式格斗,而小罗伯特-唐尼则醉心于中国的咏春拳。此外,戏里的福尔摩斯和戏外的小罗伯特-唐尼都是43岁,43岁的福尔摩斯进入他侦探生涯最辉煌的时期,43岁的小罗伯特-唐尼也不可思议地从好莱坞边缘演员成为一线明星,“我的电影和我的生活总是存在着奇异的关联。在我事业的头22年半里,我的角色往往像是被抛弃的孩子,然后,我的生活也变得如同我的角色那么糟糕。但是或早或晚,一旦你决定在赌博机前收手,你赢得财富的时机也就不远了。”在了解了该片主创人员和读过剧本之后,小罗伯特-唐尼才决定接受“福尔摩斯”这个角色,他的妻子最终也成为该片的制片人之一。虽然小罗伯特-唐尼心中的福尔摩斯是个“不折不扣的完美主义者”,但他并没有否认影片的商业性,“没错,现在拍电影的风潮的确倾向于大制作的商业片,但《夏洛克-福尔摩斯》并没有为了商业牺牲质量。”影片的另一位主演裘德-洛也一改华生“又胖又老”的形象,他的装扮倒像是时髦的英国绅士。裘德-洛对于华生的理解也与众不同:“他是个退役军人,因此遇到危机往往能很快反应。虽然相比福尔摩斯,华生的性格更拘谨,但他同样十分勇敢。”如同《蝙蝠侠》一样,《夏洛克-福尔摩斯》中的由马克-斯特朗扮演的反面角色布莱克伍德爵士也很有特色。威格拉姆透露,这个角色取材自历史上的真实人物——维多利亚时代臭名昭著的法术师和神秘主义学者阿莱斯特-克劳雷,此人曾宣称希特勒从他手中偷去了?字图案。在布莱克伍德爵士被送上绞刑架后,他宣称自己死后将回来,重燃罪恶之火。这将成为影片最大的悬念。 19 | 时政 马英九向救灾殉职飞行员颁褒扬令(图)中国台湾网8月23日消息 台当局领导人马英九、台当局“行政院长”刘兆玄今天前往高雄市立殡仪馆,共同出席台当局“内政部空中勤务总队”飞行员王宗立追思公祭;马英九并颁发褒扬令,表彰及感念王宗立为救灾殉职。据台湾“中央社”报道,刘兆玄也颁发“行政院”一等楷模勋章,“内政部长”廖了以颁发“内政部”一等专业奖章。台“立法院长”王金平、中国国民党主席吴伯雄与民主进步党主席蔡英文等都出席致哀,会场哀戚、肃穆。“莫拉克”台风造成严重灾情,王宗立等3人11日驾驶直升机协助救灾时,直升机失事坠毁,不幸殉职。(罗煜明) 20 | 科技 全画幅单反相机 尼康D3S套机售价15200元外观上,尼康D3S和D300S一样,并没有太大的变化。而Live View系统的改进,和720P规格的高清视频拍摄模式,还是非常适合尼康目前单反走势的发展。作为专业级别的单反相机,不需要再用其他的词汇来修饰了,有兴趣的朋友可以到实体店去看看。D3S还有一个很大的优点在于连拍速度的提高,FX格式下9张/秒,DX格式下11张/秒。不过D3s将最高感光度扩展至102400,并且在此高感模式下还可进行1,280×720pixs/24 fps的高清录像。编辑点评:这款D3S在之前的基础上重新设计的1200万像素级全画幅CMOS,尽管像素没有变化,但是基本的感光度范围已经提高到了12800,而扩展感光度时,更是可以高达102400——再次刷新了135规格DSLR的最高感光度记录。很显然,这一切都是为高速摄影准备的。   [联系电话] 025-86884349 13245294329 21 | 财经 基金QDII首现分红本报讯 (记者 蒋娅娅)面世近两年半以来,基金QDII首现分红。海富通基金公司昨天发布公告称,海富通中国海外精选基金将以截至3月31日的可分配利润为基准,按照每10份份额0.20元的比例派发红利,分红除息日为4月9日。这是首只进行分红的基金QDII。据悉,海富通中国海外精选去年5月开始募集,6月27日成立,主要投资“中国概念”类海外上市股票。去年四季报显示,该基金从去年11月起采取了不断逢低增加仓位,购买价值严重低估、受益于全球金融危机缓解和中国政策刺激的行业和公司。随着投资者心态企稳,这些行业出现了一定幅度反弹,海富通中国海外精选的净值也从去年10月27日的最低点0.768元上涨至今年3月31日的1.051元,涨幅达36.85%。 22 | 家居 民间作坊冲击品牌橱柜市场 质量 服务有隐忧既然有这么多人选择作坊橱柜,那这背后的原因是什么?据调查,低价是最主要原因。据一位业内资深人士介绍,成本投入决定产品价格。品牌橱柜的生产线需要几十万甚至上百万的前期投入,而作坊橱柜不需要什么投入就能开始生产,这主要是因为橱柜行业的技术含量不高,入行门槛低决定的。再有员工的培养也是品牌企业所必不可少的,资金的投入与产出自然需要一定的利润来维持。 图为 民间作坊冲击品牌橱柜的市场此外,销售渠道的建设也是控制产品价格的主要因素。卖场租金自然不能和橱柜小作坊的几本画册的成本相提并论,小作坊在这一轮中又占据了价格的先锋。橱柜是定制化产品,决定了其生产周期长。从橱柜在卖场中的样品制作,到签订销售,再到橱柜的制作和安装等,需要资金回笼周期也较长,因此,需要大量的利润作为经营周转。 在安装和服务上橱柜作坊虽然比不上大品牌企业正规和到位,但也有自己的一套生存法则。安装橱柜的技术含量较低,而且经常是在前期的改水、改电过程中就已沟通好,因此矛盾不是很突出。 大钟寺蓝景丽家世纪橱柜销售人员指着一款橱柜对笔者说,“这个确实是模仿欧派的一款经典欧式风格的橱柜,但是我们的产品质量和售后服务和他们都是一模一样的。只是我们没有设计成本和广告成本在里面,所以我们橱柜就非常有价格竞争力。” 某设计论坛版主“空间蜘蛛”告诉笔者,据他多年的经验来说,工薪阶层消费者选择1200元/延米—2200元/延米的用户占大多数。品牌橱柜附加值主要来源于产品的设计元素和宣传元素,而消费者是否买账还是个未知数。目前看来,品牌橱柜的技术含量相比于普通橱柜没有绝对优势,而且研发工作做的并不到位,以至于被其他小企业剽窃产品设计之后,在市场上很难形成绝对的竞争力。 北京橱柜市场有这样一个尴尬的事实:品牌橱柜在整个橱柜市场的分量越来越大,但是还是有超七成的橱柜产品订单出自那些不知名的,甚至毫无品牌的民间作坊。 小作坊大销量: 北京某公司职员孙先生正在装修,虽然他早就听说过品牌橱柜价格高的离谱,但在家居卖场转了一圈之后还是着实吃了一惊。他说,同样的橱柜款式,用品牌橱柜装一个厨房要上万元,而一些小品牌或小作坊只要3、4千元就可以了。虽然知道品牌橱柜和非品牌橱柜的品质有一定差别,但是巨大的价格落差还是让他选择了非品牌橱柜。 据孙先生介绍,在他同龄人中,有相同经历的占据了大多数。 笔者走访过程中发现,很多橱柜作坊的门脸不大,但是客流却不小。虽然单笔成交额不高,但成交总量却也很可观。特别是在北京周边地区,如大兴、昌平、通州等,这种情况更加普遍。很多来这里的消费者表示,装修资金的限制是他们选择的主要原因。 除了作坊店以外,很多小家装公司也可以代做橱柜。一位姓刘的消费者说,如果在接受家装公司装修服务的同时,也选择了他们的橱柜,这样就会大大节约成本,而且还能避免改水、改电等麻烦的困扰。家装公司的“一条龙”服务确实为消费者避免了很多装修的额外投入,因此顺其自然也就大有市场了。 还有相当一部分橱柜市场被“小品牌”橱柜企业霸占。他们有自己的生产基地和销售渠道,大多选择在郊区建厂降低生产成本,然后在卖场销售赚得一定人气。相比大品牌橱柜,他们在生产成本和销售渠道过程中的资金节约就成了最大法宝。 据笔者调查,一款同样款式和工艺的橱柜产品,欧派、金牌、科宝等品牌要卖到3000元/延米—4000元/延米,而小品牌橱柜则只要1280元/延米,销售员表示价格还能再商量。这样的价格优势,也成为很多消费者对品牌橱柜望而生畏之后选择的主要目标。 低价之下的隐忧: 橱柜作坊虽然占据着一定市场份额,但是不可忽视的是也存在很多问题。业内人士提醒消费者,不可避免有部分橱柜小作坊在打游击战,消费者需要维权时就会有一定困难。即使是当时没有问题,橱柜作为易损易耗品也会在将来的几年出现滑轨等小问题,到时候修理就很难找到商家了。 某橱柜企业的销售负责人也告诉笔者,针对于一般的防潮板、大芯板等板材的使用,品牌企业和非品牌企业之间没有太大区别,只要是对生活品质没有苛刻的要求,一般的橱柜产品都能满足消费者的使用。 存在即合理,在橱柜品牌产品和非品牌产品之间的巨大价格差异下,很多消费者还是选择了非品牌橱柜产品。但是小作坊产品存在的质量、服务、环保等问题也同样深刻。北京工商联厨卫行业商会秘书长牟勇认为,最终决定橱柜作坊生死大权的还是市场,如果他们很难做好产品质量和服务,必将很难长期占领橱柜市场。 23 | 时尚 组图:收腰长款外套婀娜曲线更加分导语:新年装不能只在里面下功夫,而忽略了外套。试想里面穿得光鲜亮丽,而外面却仍然裹得像个球,怎能称作“完美”?一件配有腰带或者收腰的长外套是你最佳的选择。不管你内搭裙装还是裤装,都能既保暖又让你的曲线展现出来。羊羔毛点缀的皮质长外套在硬朗中加入了柔和的元素,两者混搭十分讨巧。一条深色的牛仔裤很是显瘦,组合高跟靴整体高挑又气质。皮草点缀的毛茸茸的帽子搭配驼色外套,腰带系出完美曲线后在前面打出一个蝴蝶结十分甜美。红色的风衣点缀毛毛靴,超级亮眼又温暖,收腰的款式加上双排扣的设计堪称经典。 24 | 家居 独家揭秘业主购买瓷砖为何不能上楼 新浪家居杨轶讯 近日,有很多消费者向本网反映:购买瓷砖,商家不能无条件送货上楼,需加收一定的费用,业主对此心存疑惑:购买瓷砖为什么不能送货上楼?为何要另加收费用才可享受送货到家服务?收费标准缘何如此混乱?【事件回顾】【参与网友讨论】         新浪家居特联合新京报发起大型调研:瓷砖该不该上楼,引起业内广泛关注。一方面消费者在抱怨建材企业服务不到位的同时,商家也透露背后难言之隐。【参与调查:瓷砖上楼真的那么难吗?】【家居议事厅26期:瓷砖该不该上楼】商家服务参差不齐 造成难能送货上楼                       图为阔达装饰董事长 曹安闽根据市场调研,以及跟一些商家沟通了解到,提供免费送货上楼服务,大部分的建材商都做不到,均需另收取费用。阔达装饰董事长曹安闽谈到:送货与否,与商家的利润率有很大关系,有利润的商家肯定愿意送货。【相关阅读:集采瓷砖可送货上楼 业主自购缘何不能】    25 | 财经 基金第三方支付浮出水面 汇付天下静候最后审批见习记者李??静默多时的基金第三方支付有望近期开闸,据消息人士透露,汇付天下、华夏基金和民生银行极可能携手试点。就现有格局而言———第三方支付的加入会不会吹皱这一池春水?登陆汇付天下网站,可以发现其业务范围已经扩大到了基金理财,而点击“基金理财”,加入链接的目前“有且只有华夏基金一家,这暗示基金三方支付的试点已准备就绪。”该人士说。汇付天下市场部有关人士也证实,基金第三方支付的试点正在最后审批中。何谓第三方支付?即和多家银行签约、并具备一定实力和信誉保障的第三方独立机构提供的基金交易支付平台。汇付天下采取中间账户模式,用户选定基金后,使用第三方平台提供的账户付款;用户确认付款后,第三方机构从中间账户转款到基金公司的银行账户。目前,第三方支付在国内已广泛用于网上购物。据了解,在试点初期,基金第三方支付只能“三点一线”运行,即通过汇付天下的三方支付平台,用民生银行的卡购买华夏旗下基金,民生银行同时负责监督支付平台的资金状况。最快在下月,三方支付的合作方会拓展到多家中小银行和其他基金公司。根据汇付天下网站的介绍,随着银行和基金公司的加入,今后可实现“ 投资者可用任意银行卡投资,基金公司突破托管银行的局限。”“不管用ChinaPay或者用三方支付工具,不管资金是‘不落地’还是通过中间账户放行,我们都看最后的效果———能不能方便地跨行买基金。”一位老基民说。正因为如此,在有了ChinaPay“不落地”的平台后,有关基金三方支付的话题已静默多时。2007年底,监管层曾表示,未批准任何专业第三方支付机构为基金管理公司或基金代销机构提供基金销售支付服务,基金销售第三方支付政策正在研究制定中。此外,有权威人士指出,第三方支付还存在资质之争,因为央行对支付清算组织的管理办法尚未出台,这也增加了监管难度。三方支付将银行和客户的关系转变成第三方和客户的关系,绕开了央行清算的门槛和资金监管体系,在跨行交易和中间账户运作中可能存在监管漏洞和盲点。 26 | 时政 人大常委会委员首次与网民探讨气候变化等问题新华网北京8月26日电 (记者崔清新、张宗堂) 作为国家最高国家权力机关组成人员,多位全国人大常委会委员26日与新华网、中国人大网、人民网的网友进行了在线交流,就全国人大常委会正在审议的“应对气候变化”“转变发展方式、调整经济结构”等重要议题展开讨论,听取意见和建议,全国人大有关专门委员会部分委员和国务院有关部门负责人也参加了在线交流。全国人大常委会有关负责人表示,这是常委会首次就重大议题采取常委会组成人员与网民共同对话的方式审议。这位负责人指出,在常委会召开期间,把社会关注度高的重要议题拿出来,请常委会组成人员与网友一起讨论、审议,目的就是扩大社会参与,更广泛、更好地听取大家的意见和建议,使征求意见的范围更加广泛、讨论更加深入。这次常委会共安排了两场网上交流活动。26日上午,全国人大常委会委员、全国人大环境与资源保护委员会委员陈宜瑜和全国人大环境与资源保护委员会委员许健民、国家发展和改革委员会应对气候变化司司长苏伟就“应对气候变化”回答网友的提问。20多个网友从造成全球气候变暖的原因,我国和其他国家应承担多少责任谈起,到政府将会运用哪些手段来应对气候变化,气候变化和普通老百姓的关系等方面纷纷提问,专家们一一作答,形成了良好的互动氛围。26日下午,全国人大常委会委员、全国人大财经委副主任委员吴晓灵,全国人大常委会委员、全国人大财经委副主任委员乌日图,全国人大常委会委员、全国人大财经委委员、国务院发展研究中心技术经济研究部部长吕薇和全国人大财经委副主任委员尹中卿与网友们共议“转变发展方式、调整经济结构”话题。三个网站24日分别向网友发布了预告,征集到不少网友提出的问题。一位叫merkur的网友说,盛赞一下全国人大这次具有重要意义的创新和改革,人民代表的本职就是要代表人民意志,虽然网络使用者目前具有明显的年代性,但随着网络的普及和时间的推移,可以预见将来网络民意必将具有更为广泛的代表性,人大通过这种方式代表民意是个可喜的创举。正在举行的十一届全国人大常委会第十次会议的议程,包括审议国务院关于应对气候变化工作情况的报告、全国人大常委会关于积极应对气候变化的决议草案、国务院关于转变发展方式调整经济结构情况的报告等。全国人大常委会有关负责人表示,在会议审议这些重要议题的同时与网友进行在线交流,可以让广大群众了解我们正在开展的工作,以更好地集中群众智慧,为进一步做好工作献计献策。 27 | 教育 四六级考试今日开考 青岛十万多考生参加半岛都市报12月19日讯(记者 单俊楠) 记者19日从青岛市招考办获悉,2008年下半年全国大学英语四、六级考试将于20日开考,上午考四级 、下午考六级。青岛共有101061人参加本次考试,其中英语四级51242人,英语六级 49819人。目前,考前工作基本就绪,四六级考试结束60天后公布考试成绩,90天后发放成绩单。    更多信息请访问:新浪四六级频道 四六级论坛 四六级博客圈特别说明:由于各方面情况的不断调整与变化,新浪网所提供的所有考试信息仅供参考,敬请考生以权威部门公布的正式信息为准。 28 | 娱乐 《密阳》《黄真伊》等将在韩国电影周展映(图)新浪娱乐讯 由国家广播电影电视总局电影局、韩国电影振兴委员会主办,韩国希杰娱乐株式会社承办、北京新影联院线、百老汇新世纪影院、新东安影院共同协办的2008年韩国电影周,将于11月14日在新世纪影院举行隆重的开幕式,新世纪影院、新东安影院将在为期6天的展映中为中国观众献映《八月照相馆》、《丑女大翻身》、《密阳》、《黄真伊》、《我们的幸福时光》、《曾经是超人的男人》等十二部涵盖经典及热门新作的韩国电影。韩国电影以其清新隽永的风格和朴实精致的画面,成为近年亚洲电影奇葩。韩国电影周是中韩文化交流的一大盛事,至2008年已经举办第四届,旨在促进韩国电影文化与中国电影的交流与合作。为成功举办2008年韩国电影周,给中国观众带来最丰盛的韩国电影盛宴,主办方特别从韩国经典电影及新近上映的电影中,精选十二部口碑及票房俱佳的影片,在百老汇新世纪影院、新东安影院展映,与中国观众分享。2008年韩国电影周展映的十二部影片为《快乐人生》、《密阳》、《一番街的奇迹》、《黄真伊》、《丑女大翻身》、《千年鹤》、《飞吧,许东球》、《千年狐狸》、《曾经是超人的男人》、《八月照相馆》、《我们的幸福时光》、《打架》。其中包括,早已成为观众心中爱情典范的经典影片《八月照相馆》,宋慧乔()倾注心力的电影代表作《黄真伊》,去年曾在国内上映并获得不俗票房的爱情喜剧《丑女大翻身》,戛纳折桂并横扫亚洲各大电影奖项的《密阳》,以及“野蛮女友”全智贤()的最新影片《曾经是超人的男人》。从喜剧片到剧情片,从爱情片到科幻片,在2008年韩国电影周上,观众总能找到自己喜爱的韩国电影。11月14日,2008年韩国电影周将在百老汇新世纪影院举办盛大的开幕式,届时中韩双方领导、影人将共同出席。其中韩国著名导演李俊益的影片《快乐人生》将作为开幕影片,同时将携同《千年狐狸》导演李成疆、《我们的幸福时光》导演宋海星、《黄真伊》导演张允炫同时现身开幕活动,并在周六的展映中与中国观众见面交流。范晨/文 29 | 家居 深圳可喂鱼的涂料上黑名单本报讯(记者/张玮实习生/廖少敏)曾以“所产装修胶水、涂料能喂鱼”为广告语的深圳市绿蛙生物科技有限公司在上季度市质监局的涂料、胶粘剂质量监督抽查中,被检出其生产的内墙胶水和内墙底漆、面漆产品均有问题。其中,前者是胶粘剂粘结牢度不合格,后两种漆则被检出“游离甲醛”不合格。 1批次产品胶粘剂安全指标不合格市质监局上季度对装修必需材料“涂料和胶粘剂”进行了监督抽查。在胶粘剂上,该局共抽查了全市11家产品企业生产的14批次胶粘剂样品,主要对胶粘剂产品的挥发性有机化合物、苯、甲苯+二甲苯、游离甲醛、压缩剪切强度、标志等项目进行了检验。其中,检验合格的有10批次,抽样合格率为71.4%。在不合格的产品中,仅有1批次产品出现安全指标不合格(即“甲苯+二甲苯超标”),其余13批次产品的有害物质均在标准限值内。另有深圳市南山区雄发粘合剂厂、深圳市绿蛙生物科技有限公司、深圳市金南化工有限公司也因其胶粘剂产品的压缩剪切强度、固体含量等的不合格被列入“质量较差企业”的名单中。“绿蛙”内墙底漆面漆检出游离甲醛在上季度抽查的36家企业生产的63批次涂料产品中,合格批次为56批,抽样合格率为88.9%。其中,深圳市绿蛙生物科技有限公司今年4月27日生产的两款“涂得好”牌墙漆都被检测出“游离甲醛”项不合格。而该企业曾多次以不含甲醛、涂料和墙漆可以喂鱼等方式来显示其产品环保和安全。“根据国家标准规定,涂料的游离甲醛应小于或等于100mg/kg,该企业抽检样品实测结果分别为48mg/kg和54mg/kg,是在标准之内的。但该企业在产品中明示为‘不含游离甲醛’,虽然其含量并不高,仍被判定为该项不合格。”该局相关质监人员解释说。此外,深圳市创元化工有限公司去年7月18生产的一款20kg/桶装“PU金刚耐黄变透明光油”被检出“游离甲苯二异氰酸酯(TDI)”超标。深圳市远东化工涂料有限公司今年3月21日生产的“涂の美”牌NC透明光油,挥发性有机化合物(VOC)含量竟超标100多倍。目前,市质监局已对抽查中质量不合格的生产企业依法进行了处理,并要求其限期整改。【小贴士】胶粘剂、内墙涂料怎么选?1.到具有一定规模的建材超市或重信誉的正规商店选购。2.选购时要认清商品包装上的标识,包括厂名、厂址、产品标准号、生产日期、有效期及了解产品使用说明书等。涂料最好选购通过ISO14001和ISO9000体系认证企业的产品。3.选购胶粘剂时,可开桶查看胶粘剂的胶体是否均匀、无分层、无沉淀,开启容器时的气味应是无冲鼻刺激性的。4.购买时注意观察商品包装容器是否有破损和胀罐现象,如摇晃容器发现出现胶结便不可购买。记得索取购货的发票等有效凭证和施工说明书。 30 | 教育 四六级官网有漏洞 造假者公开卖假证“四六级办证,上网查询,先查询后付款。”近日,记者在武汉科技大学校外公告栏上看到十余张代办四六级证书的小广告。记者走访发现,四六级考试临近之际,武汉多所高校校内外均有类似广告。一纸成绩单,是目前用人单位衡量大学生英语水平的权威凭证。代办的四六级成绩单也能网上查分?前日中午,记者以找工作需要六级证书为由,拨通了一张小广告上的联系电话。接电话的是一中年男子,开口不耐烦,当得知记者是办证后,态度马上好转,“你要办什么证,我们这什么都有。”对方告诉记者办六级证书需要240元钱,“网上可以查成绩”,而且是在全国大学四六级考试的官方网站上。他一再保证提供的成绩单是考试院有水印的专用纸张制作,“只要你不拿到在上海的四六级委员会去鉴定,谁都看不出来的。”当记者对他所说的话表示怀疑时,对方便把制作假证的内幕大概叙述了一遍:先在网站上随意输入一个准考证号或者用办证者提供的准考证号,把分数复制下来,再打印到成绩单上。“网上查询六级成绩只显示成绩,没有个人的信息(姓名和照片等)。”他提供了一个qq号,“有事情和我们的工作人员说”,随即挂断了电话。记者在一家网吧加了该号码,网络显示对方“QQ”名为“四六级辅导”,一分钟不到记者就获得了认证通过。“四六级辅导”列出了办理六级证书所需要准备的资料:考试类别、姓名、学校、院系、身份证号、考试日期、分数、电子相片或者两寸相片。并表示,“办理成绩单总共240元,定金100元,三天可以拿证。”“四六级辅导”还进一步“强调”,办证需要提供的分数可以按照自己的理想填写。当记者提出560分时,他发了大大的感叹号过来,“六级考560太不让人相信了,460还可以”。记者表示国贸专业对英语成绩很看重时,他推说会尽量把分数做高些。他还提出多人办证价格可以再商量,“定金一交,人多的话,我第二天就可以办出来。”记者随后登录国家指定查询网站,仅输入武汉某高校大三学生小张提供的2008年6月份英语六级考试的准考证号,果然获得了查询结果,查询页面上显示出考试类别、准考证号、总分以及听力、阅读、综合、写作等四个单项分数,并不显示考生的姓名、照片等个人资料。记者将一名知情者提供的“造假”成绩单与真单对照发现,真假成绩单长短完全一致,烫金大字、钢印、公章样样齐全,仅凭肉眼根本无法辨别。假证书编号、准考证等信息一应俱全,并盖有“全国大学英语四、六级考试委员会”红章。在全国大学英语四六级考试委员会推荐的查询网站cet.99sushe.com上查询的分数及各项信息与成绩单上完全一致。那么,只能任由假四六级成绩单恣意横行吗?武汉科技大学教务处一位副处长介绍,目前有三种方法可核实四六级考生的成绩:一是在该生所在高校网站上查询,二是直接向该生所在高校的教务处查询,三是致函全国四六级考试委员会查询。他告诫学生要通过自己的努力去取得好成绩,“私下买四六级成绩单是学校不允许的。不要有投机的想法,以免造成经济和信誉方面的损失。”然而,当地一位跑高校教育多年的记者介绍,目前一些四六级查询网站,输入准考证号后只能查到分数,无法显示该同学姓名、照片等个人信息,而据他观察,联系高校也是一件程序复杂的事情,同时他也怀疑学校可能会为了增加就业率而包庇学生。国家查询机构的核实程序同样不能让人省心。武汉大学新闻学研究生小李,本科时是班上的英语课代表,成绩一向不错,第一次考六级时分数出人意料的低,想向四六级委员会申请复查,咨询电话总是处于占线状态或者接通后就成为忙音。“所以当前招聘单位对于学生的证书真实性考察要么提供证件‘原件’就行,最多也只会在网上进行查询,不法分子正是钻了这一空子。”这位教育记者说。所以,他建议,现在各高校在校生入校时基本都办理了电子档案,包括姓名、照片、学生证号等多项个人基本信息内容,相关部门在公开的查询设计中,把考生姓名、照片等个人信息添加就行,这样不法分子也就无机可乘。     更多信息请访问:新浪四六级频道 四六级论坛 四六级博客圈特别说明:由于各方面情况的不断调整与变化,新浪网所提供的所有考试信息仅供参考,敬请考生以权威部门公布的正式信息为准。 31 | 体育 莫雷别指望选到大牌新帅 年轻资历浅或许更有前途新浪体育讯北京时间4月28日消息,火箭已经开始在本周进行新帅的面试工作,而面对一长串的候选者,莫雷最终会敲定什么样的教练来继任里克-阿德尔曼?也许很多人都在猜测这样的问题,而《休斯顿纪事报》专家乔纳森-费根,日前也对火箭新帅的候选者发表了自己的想法:就目前的状态来看,火箭新帅的面试名单至少已经达到了14人之多,当然这仅仅是一部分,未来我们肯定会看到更多地名字出现在这份面试名单之中。但获得面试的机会并不代表他们能竞争火箭的帅位,例如最新出现的名字萨姆-卡塞尔,有消息人士爆料,卡塞尔获得面试机会,皆是因为他与总经理莫雷之间的私人关系良好,所以“外星人”成为火箭新帅的可能性并不大。我们试图从候选名单中,找出一些火箭选帅的端倪,但莫雷对于这些敏感的话题,是全然不会在这个时候回答的。不过至少从候选名单中,我们可以看出,这名新帅必定和阿德尔曼的执教风格不同,而且似乎会更加年轻、更加陌生也会更有前途的教练。杰克-西格玛将定于今天踏进莫雷的办公室,他是阿德尔曼执教时期的四个助理教练之一。西格玛的入围并不令人感到惊讶,在跟随阿德尔曼多年之后,西格玛已经对这支火箭非常了解和熟悉,不出意外,西格玛将成为火箭新帅强有力的竞争者。当然,这份候选名单中的大部分人都是联盟各支球队的助理教练,凯尔文-桑普森在雄鹿有着良好的声誉,灰熊的戴夫-约格尔、小牛的德维恩-卡西、凯尔特人的劳伦斯-弗兰克以及马刺的麦克-布登霍泽尔也都被众多媒体提及,而且这些教练所带领的球队都冲进了季后赛,虽然他们并不在球队担任最主要的教练职责,但其实这也已经足够证明他们在球队主教练身边的辅佐工作有多么优秀。但实际上,弗兰克刚刚在波士顿辅佐道格-里弗斯一个赛季,想要真正深入里弗斯的执教理念,至少还需要1-2年的时间,而在菲尔-杰克逊退役之后,布莱恩-肖将有望接替“禅师”的帅位,所以这些教练在未来的大部分时间,还是会继续担任助理教练的职责。实际上,减去那些看似无望的家伙,火箭的候选者也仅仅剩下那几名毫无名声且资历尚浅的年轻教头。但随着西格玛今天面试莫雷,相信未来不久还会有源源不断的教练走进莫雷的办公室,而在选帅这样严谨的问题上,莫雷相信不会再妄下定论。但至少从目前已知的情况下猜测,火箭的新帅并不会是一名超级大牌的教练。(小林) 32 | 房产 国美澄清:黄光裕资产被冻结一案与公司无关国美电器的一份声明指出,目前没有监管机构或司法机关就香港法院的命令与国美进行过接洽。观点地产网讯:据外媒消息,国美电器控股有限公司8月7日表示,香港法院批准香港证监会的申请,下令冻结公司创始人黄光裕资产一案,与国美电器无关。国美电器的一份声明指出,目前没有监管机构或司法机关就香港法院的命令与国美进行过接洽。据悉,黄光裕、其妻杜鹃和两家控股公司处置或出售所持的16.6亿港元国美电器股份被禁止。黄光裕及其亲友持有国美电器34%的股份。 我要评论 33 | 时尚 组图:春季混搭有道超个性女孩玩味街头导语:一款超个性的披肩式开衫,豹纹永不褪色的时尚,流苏成了这件YY的主打,在野性间多了几分祥和。春夏季节必备的披肩哦,时尚而简约!想要成为个性的街头女孩,混搭帮你来实现。茸茸的,很有蓬松感,手感柔软舒适,有弹性,亲肤性强,品质感不错。插肩蝙蝠式设计,很有视觉显瘦效果!而中袖款则多了一份搭配创新的选择!整体镂空针织,很有设计感,增添柔和度!镂空若隐若现的感觉,很有吸引力!版型很特别的一款YY,圆领插肩袖,领部内衬皮筋做成唯美的木耳花边,温婉的衬托出女性优雅的脖颈,袖口拼接,形成喇叭口,下摆松紧拼接,上下呼应,双层布料,更!内衬为涤纶混纺色丁柔滑面料(袖子内无内衬)。整体小碎花垂坠感好,木耳花边,给YY增添了不少精致女人味,秋冬可搭配打底衫内搭,甜美可爱不失女人味!罗纹收口袖,宽松的衣身,让YY凸显时尚休闲感,硬朗的条纹,简约大方!!!蝙蝠式设计,对身材无太大的限制,整件YY无任何多余的装饰,更能体现品质感! 34 | 财经 南方系股票基金一季度集体陷落岳永明投资者报 (实习记者 岳永明) 南方基金公司旗下的9只股票型基金一季度业绩集体遭遇“滑铁卢”,其中南方绩优成长甚至从2008年的第49名滑落到今年一季度的124名。银河证券统计的最新排名情况显示,截至2009年3月30日,该公司旗下9只开放式股票型的基金净值增长率全部排在同类基金90名以后,而2008年仅有南方高增长一只基金列此位置。有6只基金的排名和2008年相比出现明显下滑,另外3只基金虽然缺少2008年排名数据,但净值增长率均低于其他6家,排名下滑由此不言自明。今年一季度,164只股票型基金平均净值增长率为23.46%,但《投资者报》记者注意到,南方旗下的9只股票型基金中,同期表现最好的南方优选价值的净值增长率仅为21.99%,表现最差的南方稳健二号净值增长率仅为14.03%,比平均值低四成多。大盘屡探新高之际,“南方系”基金却摆出集体陷落的架势。究其原因,主要是其重仓股大部分涨幅偏弱,且基金的仓位普遍较低的缘故。重仓股以防御型品种为主 南方基金公司旗下股票型基金普遍重仓防御性品种。以南方高增长为例,根据年报披露的重仓股情况,前十大重仓股中的辽宁成大、山东黄金、中金黄金、中信证券、招商银行一季度的涨幅分别为105.7%、65.3%、59.3%、41.7%、31%,5只重仓股市值占基金净资产比例的12.93%,占仓位的19.7%。但这未能改变该基金排名117名的厄运。该基金前十大重仓股中的另外5只,贵州茅台排在重仓股的第一位,市值占基资产金净值的4.75%,占仓位的7.2%,然而今年一季度贵州茅台仅有5.6%的涨幅;盐湖钾肥、华能国际、中国神华和中海油服等一季度涨幅分别为1.3%、14.9%、18%和20.3%,同期上证综指则上涨了30.3%。前十大重仓股中有一半股票涨幅偏低,导致该基金一季度净值增长率仅为18.77%,比同类基金平均净值增长率低4.69个百分点。“这是典型的防御加积极的均衡配置型操作思路,由于仓位比较低,加上持股集中度较低影响整体的净值增长率。”一位不愿透露姓名的基金分析人士说。同样的问题也出现在其他8只基金中。贵州茅台除了是南方高增长的第一重仓股,同时也是南方积极配置、南方成份精选第一重仓股,南方优选价值、南方稳健贰号第二重仓股和南方稳健的第三重仓股,其中南方价值优选同时重仓中国神华、华能国际和中海油服等股票。低仓位导致踏空反弹 基金分析人士指出,仓位低是南方基金公司旗下基金整体陷落的另一原因。根据Wind数据,截至2008年12月股31日,有一年以上交易时间的134只股票型基金的平均仓位为73.5%。而南方基金公司旗下的基金除了南方隆元仓位稍超出这一平均仓位0.12个百分点外,其余有8只基金仓位维持在68%以下。当《投资者报》记者问及“低仓位基金在今年一季度对基金业绩有多大影响”时,安信证券基金分析师任瞳给出4个字——“显著落后”。去年11月份以来,大盘不断摸索新的高点,从1700点试探到2450点,涨幅接近40%,“大盘上涨,基金却没有仓位保证,影响是显而易见的”,任瞳说。提到今年以高仓位带来高增长率的例子,“中邮系”基金是最典型的一个。中邮核心优选去年一直保持90%以上的高仓位,去年在124只股票型基金中位列第122名,而今年一季度以45.53%的净值增长率稳居同类基金第一名;中邮核心成长去年的仓位维持在80%左右,今年一季度也从去年的倒数第二名升至同类基金的第5名。《投资者报》记者致电南方基金公司,对方以“受制于有关监管规定,基金公司不得对个股进行评论,也不得宣传、评论短期业绩”为理由,拒绝解释旗下股票型基金全线掉队的原因。而在随后的简短采访回复中则表示:“今年一季度以来,南方基金紧密关注市场的变化,根据这些变化调整投资组合和仓位。”根据9只股票型基金2008年年报对2009年的预测,大多数基金经理看到流动性及政策推动会带来主题性或题材性交易机会,但其更看重的是盈利和分红稳定型公司。南方基金公司采访回复中一再强调,该公司基金始终坚持以“追求持续稳定的增长”为投资判断标准,希望“媒体和投资者以更长远的眼光来关注基金运作的表现”。管理费依然高企 业绩的下滑似乎并不影响基金公司管理费收入,规模庞大的基金公司更是这样。公募基金行业“旱涝保收”现象早已遭到各方的质疑,南方基金公司也不例外。根据天相投顾数据,2008年60家基金公司共亏损1.5万亿元,其中偏股型基金(含封闭式基金)亏损额达1.46万亿元。南方基金公司亏损额为816亿元。与此相对,这60家基金公司在2008年的管理费收入为307.32亿元,相比2007年度的283.82亿元上升了8.28%,其中南方基金公司的管理费为18.1亿元,比2007年的19.2亿元下降1.1亿元。虽然去年南方基金公司管理费比2007年有所下降,但与同等规模基金公司相比偏高。截至2008年12月31日,南方基金公司资产总规模1004亿元,在60家基金公司里排在第5位,管理人报酬达到18.1亿元,排名第3,仅次于华夏基金公司和博时基金公司。从去年南方旗下9只基金的赎回情况看,除了南方隆元和去年新成立的基金南方盛元外,其他7只基金全部净赎回,赎回总规模达到240亿份以上。根据南方基金公司给出的数据,该公司基金的整体规模并没有下降,截至2008年末,南方基金公司管理的规模由2007年末的1233.65亿份上升到1314.10亿份。可以看出上升的份额主要是债券型、货币性、保本型等其他品种的贡献,股票型基金除了管理费外,并无规模上的贡献。 35 | 家居 行业发动产业升级 圣象实木地板蓄势而发2009年4月26日,由中国林产工业协会地板专业委员会、中国林科院木材工业研究所共同主办的“丰富地板品类 提升消费质量”——三层实木复合地板全国推广活动新闻发布会暨行业发展高峰论坛在京隆重举行。会上,业内人士针对在全球经济下行的大环境下,如何对新品类——三层实木复合地板产品知识普及,引导消费者进行科学消费等问题展开深入交流和探讨。国家林业局木材行业办公室副主任孙健在会上介绍说,木地板行业依托人民生活日益增长的需求以及良好的政策将在未来相当长的时期内属于朝阳产业、富民产业。这个产业的不断升级将带来市场和行业无限的生机与活力。三层实木复合地板的市场普及结构就是一个很好的方向,同时作为这项活动的重要参与者三层实木地板制造企业对此响应积极让这项活动得到了强有力的支撑。圣象集团总裁翁少斌对记者说,三层实木地板源于欧洲已经是欧洲市场的主流实木类地板产品,圣象系统引进和推广三层实木地板已经有长达十几年的历史了,行业今天以三层实木地板来促产业升级是十分远见的我完全赞同,愿意与行业和众企业一道完成这项伟大的事业。目前圣象位于丹阳的三层实木地板生产基地去年已经完成了二期扩建工程,目前圣象三层实木地板的年产能可达600万平方米,产品覆盖单拼、独幅、三层仿古实木地板以及各种饰面类型的三层实木地板农产品。600万平方米的规模产能大幅度采用国际同期先进设备工艺成本达到规模效益,三层实木复合地板真正进入实木类地板消费主流的步伐已经开始。 36 | 房产 东方太阳城摄影大赛活动奖品风光婚纱摄影、浪漫婚房、99朵浓情玫瑰三重大奖,连连赢!一等奖:选取10对父母,风光婚纱摄影一套、七夕节当日浪漫婚房一晚、99朵浓情玫瑰三重大奖,浪漫与惊喜重叠!二等奖:选取10对父母,七夕节当日浪漫婚房一晚,99朵浓情玫瑰两重大奖,浪漫无边!三等奖:选取50对父母,在七夕节当日送上99朵浓情玫瑰,甜蜜无限! 我要评论 37 | 游戏 3d《赤壁OL》14日10大更新内容亲爱的亲们,大家好,又到了每周3的例行服务器更新时间,感谢您对3d《赤壁OL》的支持和理解,这次的主要更新内容如下:2010年4月14日更新:1.修正了结义和军团升级的方式,现在每天只能升级军团一次!2.降低了高级结义和军团的升级难度,现在获得高等级配方更简单了!3.降低了伙伴的死亡之后的忠诚度惩罚,现在不怕伙伴频繁死亡了!4.装备成长难度降低,不使用幸运石如果失败成长等级只会下降一级,使用幸运石则不降低等级!5.修正了秘文·汤的减速效果!6.秘文箱100%可以开出物品!7.修正了过期的叠加物品不会全部被删除的bug!8.修正了当主人切地图后伙伴暂时不显示的bug!9.在行囊中增加了对伙伴装备的比较和装备的功能!10.护心镜不再是套装的组成部分,每两件套装可以引发一个套装属性!现在进入游戏就送新手大礼包,助你快速升级成长,新区手机、MP4、充值卡万元大奖在等你拿,赶快进入吧!3d《赤壁OL》让您迈入一段传奇!更多资讯请访问官网g2us.cn及合作网站! 38 | 游戏 《灵兽世界》三倍经验活动灵兽世界将在4月20日至22日三天推出偶数时间全服三倍经验活动,只要在偶数时间打怪就可获得3倍经验,各位玩家把握好时间快速升级哦!4月20日更新会对“海盗试炼场”进行调整。灵兽世界“海盗试炼场”自开放以来,倍受广大玩家喜爱,成为很多玩家每天必经的战场,在强势玩家玩的不亦乐乎同时,也由于试炼场难度使很多玩家忘却止步。为使更多喜欢灵兽的玩家都能够体验到海盗试炼场的乐趣,灵兽世界4月20日更新后将降低海盗试炼场他挑战难度并会调整奖励内容,使游戏更加合理。大家可使用手机登陆以下网站下载《灵兽世界OL》1.34版本客户端,预祝大家在灵兽世界中度过愉快的游戏生活!网址一:www.joy-game.com/wap(打开网站,选择【下载】—下载安装) 39 | 教育 12月20日英语四六级考试考生须知一、考试时间: ▲CET-412月20日(周六)9:00-11:20 ▲CET-612月20日(周六)15:00-17:20 二、在校考生凭准考证、身份证、学生证(不得以校园卡代替学生证)提前30分钟进考区,提前15分钟进考场,对号入座,将相关证件放在座位右上角,以备检查。学生证遗失者请于考前到教务处补办,考试当天不予办理;身份证遗失来不及补办的考生需在考前由二级学院学生办出具证明(证明写明姓名、学号、班级等资料,贴上相片,盖上骑缝公章);遗失准考证的考生,请与考务人员联系。缺少证件的考生不得进入考场。 三、本次考试四、六级题型。题型分为六部分,第一部分作文的题目在“答题卡一”上,其余五部分的题目在试题册上。第二部分即快速阅读题目部分在试题册上,考生9:40(六级15:40)方可翻阅试题册,考生不得提前翻阅或改变试卷位置,否则按违规违纪处理。 考试开始考生暂不填写“答题卡二”上试卷代号一栏,离考试结束还有十分钟即11:10时将试题册封面上的试卷代号填涂在“答题卡二”上试卷代号一栏。 由于四、六级考试全部采用网上阅卷,考生必须在答题卡规定的范围内答题,书写部分一律只能用黑色签字笔,答题卡信息点一定要用2B铅笔涂,违反上述条件的,试卷将无法评阅。 四、考生只能带专用听力收音机、2B铅笔、笔刨、橡皮擦、直尺、黑色签字笔等考试用品进场,其他与考试无关的物品(书包、特别是手机等通讯设备、MP3收音机等)严禁携带进场,否则按考试作弊论处。 五、听力考试结束后考生必须摘掉耳机,否则以违规论处。 六、本次考试,学校将采用考场探测器对隐形耳机、手机、无线针孔摄像头等作弊工具进行全面检测,请考生严格遵守考场纪律,如有违规,将给予严肃处分。 七、考试完毕,考生要等监考人员把试题、答题卡等收齐点清完毕,允许离场后才能离开考场,考生不准携带考卷、答题卡离开考场。    更多信息请访问:新浪四六级频道 四六级论坛 四六级博客圈特别说明:由于各方面情况的不断调整与变化,新浪网所提供的所有考试信息仅供参考,敬请考生以权威部门公布的正式信息为准。 40 | 体育 杜兰特41分奇兵送9盖帽 雷霆4-1掘金晋级第二轮新浪体育讯北京时间4月28日,雷霆主场最后4分钟完成9分的逆转,以100-97险胜掘金,从而以4-1淘汰对手,晋级西部半决赛,等待马刺与灰熊的胜者。掘金5人得分上双,阿隆-阿弗拉罗15分,肯扬-马丁14分10个篮板,泰-劳森13分,达尼罗-加里纳利11分,雷蒙德-费尔顿13分。雷霆上一战失利,错失横扫对手的机会。控卫威斯布鲁克出手投篮30次,这是他生涯第三次。关键时刻他出手时机的选择值得商榷,教练也委婉批评了他。“他出手太多了吗?是的。但如果你能从中接受教训的话,就会得到进步,拉塞尔(威斯布鲁克)是每年都会进步的球员。”掘金扳回一局后士气高涨,在雷霆的主场,他们也打得非常顽强。一开场两队就打得难解难分,首节打了4分钟后,劳森三分得手,掘金以13-9领先,但杜兰特和帕金斯马上还以颜色,各投中一球后,雷霆反超。掘金一度取得8分优势,不过梅诺为雷霆投中压哨三分,将比分追成25-28。哈登在第二节一开始就三分命中,此后他两罚一中,雷霆将比分超出。掘金的攻势很猛,劳森和哈灵顿连续三分命中后,在本节还有7分36秒时,他们又以36-33领先。两队本节最大差距只有4分,几度交替领先。杜兰特在本节结束前两罚两中,双方以50-50进入下半场。第三节双方仍打得难解难分,本节最大差距还是4分。最后30秒的争夺可以看出双方拼抢之激烈。本节还有29秒时,史密斯三分命中,掘金以74-71超出。杜兰特想还以一记三分,但未能命中,伊巴卡罚中一球后,他们落后2分。掘金最后一次进攻造成犯规,费尔顿两罚两中,他们以76-72领先进入最后一节。掘金在第四节开始拉开差距,比赛还有4分15秒时,阿弗拉罗两罚两中,他们连得4分,以91-82取得全场最大的优势。雷霆在2分钟内未能得分,终场前3分23秒才由杜兰特三分得手,威斯布鲁克罚中一球后,杜兰特在比赛还有2分30秒时中投命中,雷霆将比分追成88-91。掘金开始陷入困境,在3分钟内未能投篮命中,劳森甚至两罚不中。雷霆则恢复信心,比赛还有1分50秒时,哈登三分命中,将比分扳平。杜兰特在比赛还有1分05秒时连投带罚拿下3分,雷霆以96-95反超。掘金又一次领先后,杜兰特在比赛还有46秒时造成犯规,两罚两中,雷霆以98-97领先。伊巴卡此后送出一记大帽,雷霆抢到篮板,杜兰特在比赛还有12秒时中投命中,雷霆领先了3分。掘金连续三分不中,回天无力,本赛季的使命到此结束。雷霆首发阵容:拉塞尔-威斯布鲁克、萨博-塞弗罗萨、肯德里克-帕金斯、凯文-杜兰特、塞尔吉-伊巴卡。掘金首发阵容:阿隆-阿弗拉罗、泰-劳森、内内-希拉里奥、肯扬-马丁和达尼罗-加里纳利。(吴哥) 41 | 财经 诺安增利债券基金获批诺安基金旗下第八只开放式基金———诺安增利债券基金日前获批,将于近日发行。该基金债券类资产的投资比例不低于基金资产的80%,非债券类资产的投资比例合计不超过基金资产的20%。在投资策略上,诺安增利债券基金追求在风险可控条件下的投资回报,通过“核心———增强”的资产配置模式,建立一个可产生有竞争力业绩回报的低风险端的投资组合。其主要投资的核心类资产包括国债、金融债、短期融资券、企业债、公司债、可转债、央行票据、回购、资产支持证券等固定收益类金融工具;而增强类资产则主要为股票(包括新股申购)、权证等中国证监会允许基金投资的其他非固定收益类金融工具。(小柯)诺安基金旗下第八只开放式基金———诺安增利债券基金日前获批,将于近日发行。该基金债券类资产的投资比例不低于基金资产的80%,非债券类资产的投资比例合计不超过基金资产的20%。在投资策略上,诺安增利债券基金追求在风险可控条件下的投资回报,通过“核心———增强”的资产配置模式,建立一个可产生有竞争力业绩回报的低风险端的投资组合。其主要投资的核心类资产包括国债、金融债、短期融资券、企业债、公司债、可转债、央行票据、回购、资产支持证券等固定收益类金融工具;而增强类资产则主要为股票(包括新股申购)、权证等中国证监会允许基金投资的其他非固定收益类金融工具。(小柯) 42 | 游戏 《大航海》“玩游戏送充值卡”名单随着温情三月的的徐徐到来,《手机大航海》二月“玩游戏送充值卡”活动圆满落下帷幕,在继前两次获奖名单公布后,最后一期的获奖名单也新鲜出炉,下面就来公布本次活动最后一期50元充值卡的获得者名单,更多30元、10元充值卡获得者请关注手机大航海官网。第三期(2月20日-2月28日)50元充值卡的获奖名单与此同时,本次活动的后续奖励发放工作将正式展开,在活动结束后的7个工作日内,《手机大航海》官方确认其信息后将充值码以短信形式发送给玩家,请获奖的玩家耐心等待!随着本次活动的结束,接下来的“无与伦比的游戏嘉年华”活动将拉开三月精彩纷呈的活动序幕,敬请期待!客服热线:400-8131988客服邮件:nu@digifun.cn客服QQ: 964559581官方QQ群:84922609短信平台:13619319537 43 | 时政 台当局称考虑把人民币纳入外汇存底中新网8月7日电 据“中央社”报道,台湾当局行政负责人刘兆玄接受美国道琼新闻社专访时指出,在两岸关系大步向前之际,可以考虑将人民币纳入台湾的外汇存底。台湾官方日前公布数字显示,7月底外汇存底3210.94亿美元,较6月增加35.3亿美元。刘兆玄说,财政部门预计1个月左右公布一项中程计划,从明年起逐年减少经常预算,藉以控制日益严重的财政问题;而在两岸关系正以前所未有速度扩展时,可考虑把人民币纳入外汇存底。谈及台湾能源政策时,刘兆玄周四在台北表示,台湾核四厂兴建完成后,将推动使用更多核能电力,达成低碳能源组合目标。刘兆玄认为,受到地理环境限制,拥挤的台湾不适合发展大规模再生能源计划,但却可成为太阳能与风力发电工业设备的主要供应者。 44 | 体育 艾伦怀特令江苏媒体惊呼:山东外援比我们的还差与其说南钢打得好,不如说山东打得差。昨晚,南钢客场100:95险胜山东黄金男篮,本赛季双杀对手,继续坐在联赛第四的位置上。值得一提的是,一直被人诟病的南钢外援终于被证明在CBA联赛中不是最差的,因为山东队双外援怀特和艾伦的表现更差。防守懈怠 教练不满完胜变险胜昨晚,南钢队表现最好的时刻是在第二节,在胡雪峰和外援莱特的带领下,南钢打出得分高潮,一度将分差拉大到16分,半场结束仍然领先10分。中场休息时,主帅徐强特别赞扬了球队的防守,认为队员对山东强大的外线防守很得力,上半场几乎没给对方外线从容投篮的机会。然而,徐指导怎么也没有想到。下半场,他的队员们却突然失去了外线防守的感觉,要不是核心胡雪峰和外援莱特极有可能再次在客场遭遇翻盘。第四节,南钢队一度将分差拉大到13分之多。就在人们以为比赛将进入垃圾时间时,让人看不懂的南钢龙再次显出神经刀的本质,3分钟之内,被对方连续得分。第四节还剩2分34秒,李林接怀特传球后外线再次出手命中,87:90!南钢的优势很快只剩下3分。主帅徐强赛后回忆说:“我当时真害怕又被对手翻盘了,这个赛季,我们有过太多的教训,好在胡雪峰和莱特最后时刻顶住了。”虽然最终赢下了比赛,可客观地说,南钢队昨晚的表现并不出色,如果不是山东主场压力过大,投篮命中率惨不忍睹,南钢也难以在客场带走一场胜利。“今晚山东的双外援有些失常,外线篮子也差,要不然,这场球还真悬。”一位南钢主力很客观地分析了昨晚的比赛。在一度大比分领先的情况下,南钢龙硬是将一场完胜打成了险胜,特别是队员在第三节和第四节一段时间内的懈怠,险些酿成苦酒。助理教练李长山对队员下半场在防守上的懈怠提出了严厉批评:“教练特别布置了对山东外线核心孙杰的防守,上半场防得非常好,下半场领先多了,大家又开始飘飘然了。孙杰下半场3分球投进了5个,我都不知道当时大家是怎样想的,怎么防的。”外援比拼 这次莱特莫伊索赢了!见到了新疆外援辛克尔顿和杜比,于是知道了CBA外援的最高水平是什么样。见到了山东外援怀特和艾伦,于是知道了CBA联赛中还有比南钢队更次的外援。上轮打新疆,南钢双外援与新疆双外援的得分比是28:71,43分的得分差,让南钢外援莫伊索和莱特抬不起头来,球迷们也骂声一片,有极端的球迷给记者打来电话,认为南钢队中的江苏本土球员无论打成什么样,都应该竖起大拇指,因为南钢的外援太差了。一时间,莫伊索和莱特承担了巨大的心理压力。特别是莱特,他还站在了下岗的悬崖边缘。昨晚,南钢的两位外援终于知耻而后勇,莱特贡献了19分,比赛最后时刻,连续罚球命中,确保了胜果。另一位外援莫伊索虽然6犯下场,但他在内线的威慑力远比数据表现的更为可怕,他全场也拿下了17分。反观山东大名鼎鼎的双外援怀特和艾伦,他俩仿佛还未从假期中走出,艾伦上空篮都能不进,怀特失误频频。正常来说,山东双外援一场球至少拿下40分以上,可昨晚,作为主力得分手的怀特只得到17分,艾伦只有可怜的13分。36:30!南钢双外援竟然在得分上压倒了艾伦和怀特。“这场球赢得非常艰苦,应该说我们的外援打得很努力,发挥也不错。山东两名外援好像有点不在状态。”随队的南钢俱乐部总经理王敏赛后颇为庆幸地说。主帅徐强也表示,山东与江苏比最大的优势就是外援,一旦他们的双外援都不能打出高水平,则不可能战胜国内队员水平更高的南钢队。本报记者 刁勇与其说南钢打得好,不如说山东打得差。昨晚,南钢客场100:95险胜山东黄金男篮,本赛季双杀对手,继续坐在联赛第四的位置上。值得一提的是,一直被人诟病的南钢外援终于被证明在CBA联赛中不是最差的,因为山东队双外援怀特和艾伦的表现更差。防守懈怠 教练不满完胜变险胜昨晚,南钢队表现最好的时刻是在第二节,在胡雪峰和外援莱特的带领下,南钢打出得分高潮,一度将分差拉大到16分,半场结束仍然领先10分。中场休息时,主帅徐强特别赞扬了球队的防守,认为队员对山东强大的外线防守很得力,上半场几乎没给对方外线从容投篮的机会。然而,徐指导怎么也没有想到。下半场,他的队员们却突然失去了外线防守的感觉,要不是核心胡雪峰和外援莱特极有可能再次在客场遭遇翻盘。第四节,南钢队一度将分差拉大到13分之多。就在人们以为比赛将进入垃圾时间时,让人看不懂的南钢龙再次显出神经刀的本质,3分钟之内,被对方连续得分。第四节还剩2分34秒,李林接怀特传球后外线再次出手命中,87:90!南钢的优势很快只剩下3分。主帅徐强赛后回忆说:“我当时真害怕又被对手翻盘了,这个赛季,我们有过太多的教训,好在胡雪峰和莱特最后时刻顶住了。”虽然最终赢下了比赛,可客观地说,南钢队昨晚的表现并不出色,如果不是山东主场压力过大,投篮命中率惨不忍睹,南钢也难以在客场带走一场胜利。“今晚山东的双外援有些失常,外线篮子也差,要不然,这场球还真悬。”一位南钢主力很客观地分析了昨晚的比赛。在一度大比分领先的情况下,南钢龙硬是将一场完胜打成了险胜,特别是队员在第三节和第四节一段时间内的懈怠,险些酿成苦酒。助理教练李长山对队员下半场在防守上的懈怠提出了严厉批评:“教练特别布置了对山东外线核心孙杰的防守,上半场防得非常好,下半场领先多了,大家又开始飘飘然了。孙杰下半场3分球投进了5个,我都不知道当时大家是怎样想的,怎么防的。”外援比拼 这次莱特莫伊索赢了!见到了新疆外援辛克尔顿和杜比,于是知道了CBA外援的最高水平是什么样。见到了山东外援怀特和艾伦,于是知道了CBA联赛中还有比南钢队更次的外援。上轮打新疆,南钢双外援与新疆双外援的得分比是28:71,43分的得分差,让南钢外援莫伊索和莱特抬不起头来,球迷们也骂声一片,有极端的球迷给记者打来电话,认为南钢队中的江苏本土球员无论打成什么样,都应该竖起大拇指,因为南钢的外援太差了。一时间,莫伊索和莱特承担了巨大的心理压力。特别是莱特,他还站在了下岗的悬崖边缘。昨晚,南钢的两位外援终于知耻而后勇,莱特贡献了19分,比赛最后时刻,连续罚球命中,确保了胜果。另一位外援莫伊索虽然6犯下场,但他在内线的威慑力远比数据表现的更为可怕,他全场也拿下了17分。反观山东大名鼎鼎的双外援怀特和艾伦,他俩仿佛还未从假期中走出,艾伦上空篮都能不进,怀特失误频频。正常来说,山东双外援一场球至少拿下40分以上,可昨晚,作为主力得分手的怀特只得到17分,艾伦只有可怜的13分。36:30!南钢双外援竟然在得分上压倒了艾伦和怀特。“这场球赢得非常艰苦,应该说我们的外援打得很努力,发挥也不错。山东两名外援好像有点不在状态。”随队的南钢俱乐部总经理王敏赛后颇为庆幸地说。主帅徐强也表示,山东与江苏比最大的优势就是外援,一旦他们的双外援都不能打出高水平,则不可能战胜国内队员水平更高的南钢队。本报记者 刁勇 45 | 教育 上海2010上半年四六级考试报名4月8日前完成今年全国大学英语四、六级考试定于6月19日(周六)举行。根据教育部考试中心的考务工作安排,上海地区(除考区四外)高校必须在4月8日前完成报名工作,考生在就读学校的规定时间内完成报名,逾期不进行补报名,不得跨校报名参加考试。报名资格为全日制普通高等院校本科、专科、研究生在校生,以及各类全日制成人高等院校本科、专科在校生;修完大学英语四级课程的学生才能报考英语四级;大学英语四级考试成绩425分以上 (含425分)或2005年6月以前已获得大学四级证书的在校学生,修完大学英语六级课程才能报考英语六级。 46 | 游戏 手游用户付费意愿高 将成受关注行业2009年作为3G元年,移动互联网的兴起,让手机游戏行业也风生水起。据易观国际最新发布的报告显示,2009年中国 移动互联网的市场规模达到了388亿元,易观的分析认为,在各种移动互联网的应用中,手机游戏和手机音乐等娱乐类应用对收入贡献最大。调查显示,在移动互联网用户近半年使用过的应用中,手机游戏占比最高为68%,同时手机游戏的付费意愿也最高。手机游戏用户潜力巨大易观预测,2010年国内移动互联网用户将达到3.3亿,同比上升65%,而该市场收入将达到781亿,同比上升超过100%。据工信部统计显示,2009年中国现有手机用户已达到7亿户,中国已经是全球手机用户最多的国家。据不完全统计,手机游戏用户在5000万左右,手机游戏还有相当大的潜在用户群。随着3G网络的建设,手机网络游戏逐渐突破PC网游的位置局限,手机网游也势必成为人们追求时尚的一种方式。据棋牌手游厂商小奥游戏城的负责人介绍,2009年,因为3G移动互联网的逐渐兴起,小奥举办的各类斗地主活动中,小奥游戏的在线人数屡创新高。新版4.0斗地主、象棋游戏的推出,精美的画面,更快的响应速度使得玩小奥游戏城迅速积聚了大量的人气。风投称手机游戏成非常受关注行业3G时代,应用为王。而手机网游则是3G最为重要的应用之一,自然被运营商十分看好。作为手机游戏产业链的主导者,运营商的青睐自然是产业链的风向标,也带动终端厂商、游戏开发商、风险投资商纷纷涌入了手机网游产业。红杉资本中国基金创始及执行合伙人沈南鹏近日表示,“游戏在中国是一个巨大的市场,是中国青少年生活当中非常重要的一部分,我们已经有上市的超过15亿美金市值的企业6家,中国游戏已经不仅仅变成了中国现象,而且是世界现象。在未来几年社交游戏和手机游戏都会成为非常受关注的行业。” 47 | 财经 9只偏股基金净赎回28.3亿份A股市场今年以来持续反弹,震荡上扬,偏股型基金净值迅速回升,赚钱效应再度凸显。在行情持续演绎、基金净值大幅回升后,基民面临着“去”与“留”的两难抉择。业内普遍预测,上证指数达到3000点可能会出现基金赎回潮。那么,在目前上证指数已越过2400点关口的情况下,基金业内担心的赎回潮是否有出现的苗头?季度末部分基金参与上市公司定向增发,1季度基金份额变动情况终于露出“冰山一角”,净赎回成为这些基金的主基调,9只偏股型基金今年以来合计净赎回达到28.3亿份。半数偏股基金遭净赎回根据上市公司公告,3月30日广发基金旗下7只偏股型基金参与了力源液压定向增发的认购,华夏基金旗下4只偏股型基金参与定向增发,海富通旗下4只偏股型基金和1只偏债型基金参与定向增发,中海基金旗下3只偏股型基金参与定向增发。以某只基金公告日“持有定向增发股票的账面价值”除以“占资产净值比例”再除以“公告中截止日期的最新净值”,就可以推算出这只基金在参与定向增发当日的份额,将该份额与基金4季报时公布的份额比较,就可以得出今年来该基金的份额变动情况。根据目前局部数据显示,偏股型基金1季度遭遇净赎回似乎成为主基调。截至3月30日,上述18只开放式偏股型基金,今年以来遭遇净赎回的达到了9只,总计净赎回28.3亿份,另外9只基金总计净申购21.8亿份。由此可见,上述18只偏股型基金中,半数遭遇了净赎回,且净赎回总份额超过净申购总份额。此外,参与定向增发的1只偏债型基金遭遇净赎回达1.29亿份。业绩成为申赎风向标从各基金的申赎情况来看,虽然个别业绩靠前的偏股型基金遭遇了净赎回,但净赎回规模并不大。就目前的统计数据看来,整体上,偏股型基金的业绩好坏仍然是投资者对基金进行申赎的风向标。据统计,9只遭遇净赎回偏股型基金中,有1只偏股型基金今年以来净赎回在10亿份以上,1只偏股型基金净赎回超过5亿份,1只基金净赎回超过3亿份,4只基金净赎回在1亿份到2亿份之间,还有1只基金净赎回在1千万份左右。对比上述基金今年以来的业绩,3只净赎回超过3亿份的基金业绩均处于中等水平,其余4只净赎回在1亿份到2亿份的偏股型基金业绩位于中等或者中等以下。而今年以来份额实现增长的8只偏股型基金中,则有3只净申购超过1亿份,1只净申购为几百万份,其余4只净申购在1千万份以上。截至3月30日,3只净申购超过1亿份的偏股型基金中,有2只今年以来净值增长率在30%以上,1只在25%左右。总体来看,基金的申赎在一定程度上反映出了基民的投基理念。虽然个别净值涨幅较大的基金依然遭遇净赎回,部分投资者依然有落袋为安的想法,但整体上看,业绩依然是基金申赎的风向标。快报记者 吴晓婧 48 | 时尚 组图:明星恋爱ing 12星座约会时装战记导语:12个星座拥有12种个性,如何找到最适合你的约会着装,在情人节展现自己最美的一面?明星超模达人亲身示范,来解析本季潮流与专属你的幸运约会装吧。水瓶座约会装 简洁洒脱水瓶座 1月20日-2月18日阿格妮丝-迪恩:前卫、时尚的水瓶座,简洁款式的连身裙将瓶子的洒脱与明快体现得淋漓尽致,这款裙子设计很是新潮。双鱼座约会装 复古印花双鱼座 2月19日-3月20日 赵薇:双鱼座行事率性,民族风符合双鱼座天马行空的性格,能让双鱼座呈现综合狂野和浪漫的双重风格。导语:12个星座拥有12种个性,如何找到最适合你的约会着装,在情人节展现自己最美的一面?明星超模达人亲身示范,来解析本季潮流与专属你的幸运约会装吧。水瓶座约会装 简洁洒脱水瓶座 1月20日-2月18日阿格妮丝-迪恩:前卫、时尚的水瓶座,简洁款式的连身裙将瓶子的洒脱与明快体现得淋漓尽致,这款裙子设计很是新潮。双鱼座约会装 复古印花双鱼座 2月19日-3月20日 赵薇:双鱼座行事率性,民族风符合双鱼座天马行空的性格,能让双鱼座呈现综合狂野和浪漫的双重风格。 49 | 家居 橱柜企业市场竞争突变 创新让品牌企业领先一步2009年,随着宏观经济大形式对家居制造业的影响,让本来就已经处于整合风暴中心的橱柜行业更是“雪上加霜”。据业内人士介绍,目前橱柜企业面临的最大主要危机是生产成本剧增、利润大幅下滑。对此,面对厨电企业、国外柜橱企业大肆进军橱柜领域,部分中小橱柜企业将可能遭到市场淘汰,而品牌企业则以不同的创新手段来适应市场,力图从险恶的环境中胜出。 创新经营理念,让橱柜企业进军家居全行业。据了解,目前国内一些品牌橱柜企业已经有具备了自己生产和销售厨电的能力,面对容量200亿的厨电市场,一些高端橱柜企业表示自有的厨电生产线早已能满足消费者对一体化购买的需求。此外,部分橱柜企业也已经逐渐认识到只盯住橱柜市场本身很难突破现有困境,因此,一大批橱柜企业纷纷开始涉足泛家居行业发展,如整体家装、木作业、家电等等,只要是能赚钱的,他们一概收入囊中。提前布局,品牌企业暗战“整体厨房”。据调查,在过去的一年里,本土化品牌橱柜动作很大,尤其是随着海尔、长虹等家电巨头纷纷进入橱柜行业,占领一席之地。一方面,品牌橱柜顶着“叫好不叫座”的压力,继续研发新品提高市场占有率;另一方面也开始扩展市场方向,寻求更多出路。虽然目前橱柜和家电企业有着越来越深入的融合,但是真正能够做到家电、橱柜紧密配合的“整体厨房”却是寥寥无几。业内专家分析认为,橱柜与家电的配套性乃至以后的售后服务等内容只有大品牌才有实力进行支持,因此市场的整合也在所难免。但可以肯定的是,“整体厨房”将成为未来发展趋势。瞄准精装房,家居体验馆传递品牌文化。随着08年国家政策的倾斜,精装修成为未来家装的主要趋势。由此带来的巨大市场价值也引起橱柜行业的重视,一些企业也开始跃跃欲试准备分一杯羹。迎接“精装修年”的到来,如何向开发商抛出“绣球”是橱柜企业要面临的首要问题,这就需要橱柜行业的整体规范,各个橱柜企业的严肃自律,以及提升橱柜产品的整体质量和竞争力。告别价格战,提升服务丰富品牌元素。目前我国橱柜行业已经呈现出了可喜的一面。虽然原材料、劳动力等因素压缩了橱柜企业的利润空间,也产生了较大的价格上涨压力,但对大品牌企业来讲却是再次提升自己的机会。众多品牌企业负责人纷纷表示,品牌企业要不断提高企业的文化附加值,告别单纯的“价格战”,还要会打“感情牌”,提高企业文化传播力,增强大众认同感,使企业品牌迅速上升为企业文化。 据了解,今年宏观经济大背景虽然给行业带来了巨大影响,企业的利润空间在下降,但国内橱柜企业仍然十分看好中国橱柜市场。今年将是我国橱柜企业重点加强科技创新与绿色环保的一年,提升科技创新、服务水平成为当务之急,品牌橱柜企业将迎来一次难得的品牌突变机会。 50 | 时政 国家税务总局:双薪不再按月薪单独计征个税本报讯(实习记者董长青) 今后单位在年底给员工发“双薪”的时候,多出来的一个月工资将与当月工资合并后计征个人所得税,国家税务总局昨天发布《关于明确个人所得税若干政策执行问题的通知》,废止了将多出来的一个月工资单独计征个税的计税方法。税总在2002年发布的《国家税务总局关于个人所得税若干政策问题的批复》里指出,个人取得的“双薪”,应单独作为一个月的工资、薪金所得计征个人所得税。对上述“双薪”所得原则上不再扣除费用,应全额作为应纳税所得额按适用税率计算纳税,但如果纳税人取得“双薪”当月的工资、薪金所得不足800元的,应以“双薪”所得与当月工资、薪金所得合并减除800元后的余额作为应纳税所得额,计算缴纳个人所得税。税总在新通知里废除了上述“双薪制”的计税方法,对此,中央财经大学税务学院副院长刘桓表示,这意味着,个人所取得的多出来的一个月工资将与当月工资合并后计征个税,而不是单独作为一个月的工资、薪金所得计征个人所得税。刘桓认为,新办法对普通百姓影响不大,但如果是一些收入高的个人来说,合并后适用的税率可能会提高,比如从10%调到15%,这样也许会造成个人所得税小幅增加。转让离婚析产房可申请免税国家税务总局昨天发布《关于明确个人所得税若干政策执行问题的通知》,通知明确,对于个人转让离婚析产房屋,通过离婚析产的方式分割房屋产权是夫妻双方对共同共有财产的处置,个人因离婚办理房屋产权过户手续,不征收个人所得税。析产又称财产分析,是指财产共有人通过协议的方式,根据一定的标准,将共同财产予以分割,而分属各共有人所有。析产一般发生在大家庭分家或者夫妻离婚时对财产的处理中。通知还称,个人转让离婚析产房屋所取得的收入,允许扣除其相应的财产原值和合理费用后,余额按照规定的税率缴纳个人所得税;其相应的财产原值,为房屋初次购置全部原值和相关税费之和乘以转让者占房屋所有权的比例。个人转让离婚析产房屋所取得的收入,符合家庭生活自用五年以上唯一住房的,可以申请免征个人所得税。> 相关阅读:税务总局明确个税执行口径 双薪制计税法停止 51 | 游戏 《酷柚OL》新资料片地下城今日公测经过两个月紧锣密鼓的开发,酷柚众望所归。按照预定计划于4月13日正式发布最新资料片“地下城”的公测客户端。此次“地下城”版本新增:1、副本地图和超强BOSS“一撮毛”。荣誉击杀BOSS,跻身酷柚排行榜,成为全服玩家景仰的名人。真乃,一将功成万骨枯!击败BOSS还有机会获取技能书残片、宝箱和合成材料。残片凑够一本书即可学得神秘绝技,宝箱可随机开出奖励物品,合成材料助君成为最强者。2、新增三种新宠和兽笼。万兽之王—锦毛虎、凶神恶煞—食人鱼、魔法怪物—飞天獾。三个预留的兽笼,不再为爱宠无处托管而烦劳;3、新增补血、恢复技能、复活等药品,玩家在游戏NPC老板娘处即可购得。背上足够的药品,进入凶险的、迷宫般的地下城,过关斩将。能否见得终极BOSS“一撮毛”还得实力说话;4、竞技场PK每日上限增加为15场。不用再为玩的不尽兴,大呼酷柚好玩但是不过瘾。横版,PK,打击感,好玩又不累--这就是酷柚Online。 52 | 游戏 《九州OL》风云再起更新内容抢先知2月25日,《九州online》资料片“风云再起”即将迎来每周四的例行更新,本次更新将对新春部分活动进行收尾,以及部分功能、活动内容的修正与更新。把握风云再起最新动态,掌握第一手内容,千万不可错过今天的内容。2月25日星期四,随着风云再起例行更新之后,全服通缉易小天活动将在2月28日结束,所以还意犹未尽,想要抢夺更多宝物的玩家朋友,抓紧最后时间寻找易小天。本次更新结束后,集字活动将暂时停止,也就意味着此前30级怪物会随机掉落各种字符的功能将取消。背包和仓库还存有字牌的朋友,请尽快整理好成套字牌尽快兑换。字牌掉落停止后,也将无法再进行奖励兑换。往日,自己的装备在精炼多次后,往往自己也想不起来到底精炼的多少回,现在装备精练次数将会显示在你装备名称里,再也不用晕头晕脑了!2月25日更新还将有两项重要活动开启,绝对是你不愿错过的惊喜,这就是元宵佳节灯谜活动、日常跨服PK赛。元宵节灯谜活动,2月26、27、28三天举行。活动期间内每位玩家可以前去NPC天机道人处答题,每道题答中后可得1个每日任务经验和1点荣誉值奖励。虎年开年,让你的智慧转起来,让所有在九州大地卧虎藏龙的朋友都动起来,元宵智慧大冲刺就要开始,你是否能够满载而归呢?日常跨服PK赛,每日12点开打,参加玩家每日需提前半个小时前去NPC竞技官员处报名,比赛为淘汰制,每日冠军奖励1个魔核。证明实力与诅咒武器的诱惑,谁能错过这样的机会。九州世界本就风起云涌,谁能笑傲群雄成为万人的焦点,一切尽在你的掌中。精彩在九州无限绽放,更多惊喜内容等待你来探索。新年喜庆余温未散,九州全服整装待发。玩2010最火手机网游《九州online》资料片“风云再起”,让你虎年满精神!永久免费的手机网游《九州online》资料片“风云再起”。感谢广大玩家对《九州online》喜爱与支持!发送免费短信“JZ”到1066901234即可免费获得2010年最火爆的手机游戏。《九州online》客服:010-82051776《九州online》客服邮箱:jzol@obmgame.com 53 | 家居 科宝博洛尼跨媒体营销3.0进行时 11月初,王络丹及陈柏霖主演的首战贺岁档影片,大打浪漫感情牌,上映首周即以820万收入成为当周的票房冠军。而电影的独家赞助品牌——科宝?博洛尼,凭借这一影片的热映,成为都市男女心中“浪漫”家居的代表。 无独有偶,在影片的首映礼上,王络丹的一句“我拍的不是电影,是浪漫”迅速蹿红网络,被视为是对范冰冰“拍的不是电影,是寂寞”的回击,引爆了整个网络中“浪漫派”与“寂寞派”两派粉丝的激烈论战。一时间,几乎所有的热门中文论坛中都爆出了“王范PK”一事。浪漫之势的猛烈和影响力的巨大可以窥见一斑。 一系列“浪漫派”事件,不仅让无数网友拥有了“浪漫派”的身份,成就了一场网络盛宴,也使得科宝?博洛尼品牌运作多日、倍受猜测和关注的、国内首次真正意义上的运用跨媒体整合营销打造的“浪漫厨房”理念浮出水面。 WEB3.0时代,品牌推广应有怎样的创新思路?科宝?博洛尼“浪漫厨房”的营销运作树立了一个成功的典范。此次推广,科宝?博洛尼摒弃以传统媒体为主、网络媒体为辅的方式,在国内首创以网络作为传播主体,电视、电影、平面等传统媒体多渠道辅助配合的模式,引爆跨媒体营销的革命,取得了令业界瞩目的传播效果。截止到目前,以浪漫派为主题的帖子总点击量超过3000万,评论20余万条,遍布天涯社区、猫扑社区、新浪论坛、搜狐论坛、网易论坛、腾讯论坛、MSN论坛、凤凰论坛、tom论坛等全球热门中文BBS,将“浪漫”推至了一个前所未有的高度。 Web 3.0语境下“浪漫”横空出世四部曲 时间倒回至9月初,科宝?博洛尼央视“非浪漫 不厨房”广告上市在即。而受到贾君鹏事件的启发,科宝?博洛尼品牌部在这种营销手段的基础上,制定出了一个跨媒体整合营销的庞大推广计划,以网络口碑营销手段协助这一央视广告的推广。在经过内部讨论后,科宝?博洛尼迅速制定下 “浪漫派”与“寂寞党”的网络论战这一全新的网络口碑营销战略。 浪漫潜伏——2009年9月15日,优酷网的首页出现了一个据说是由湖南卫视《一起去看流星雨》的导演所拍摄的新片小样,这个视频最经典的对白在于囊括了“寂寞党”最流行的口头语,尤其是片中小姑娘的一句“姐要的不是寂寞,是浪漫”,明显是对“寂寞党”赤裸裸的挑衅,该视频连续6天被优酷视频首页推荐,一周之内播放次数达到了150万。而视频背景中出现的与央视广告相同的升降橱柜,为之后的“浪漫厨房”深深的埋下了一个伏笔。 初露锋芒——紧随视频短片发布之后,天涯社区上出现了被誉为“天涯杂谈第一骂帖”的讨论帖——《大家能不能不那么寂寞啊》,一周时间就有超过百万的点击,, 风头正盛的寂寞党的面前此刻清晰的出现了一个清晰的对手轮廓,这部分人将自己笑封为“浪漫派”。 刀光剑影——十一前后,利用假期出行的“浪漫派”与蜗居家中的“寂寞党”在网上形成一场拉锯式的PK,在对生活态度和生活方式的PK中,最终“浪漫派”以众多浪漫出游的图片成功打压“寂寞派”的无聊生活。 天赐良机——十一月初,科宝?博洛尼独家赞助影片《恋爱前规则》上映,成为整个浪漫事件的高潮。这部浪漫爱情轻喜剧中浪漫空姐成功征服了寂寞宅男,而由影片发布会上王珞丹一句“我拍的不是电影是浪漫” 引发的“王范PK”,在网络上迅速形成浪漫派与寂寞党的新一轮大型口水战,吸引众多网友对浪漫派的强烈关注,使得“浪漫派”成为“贾君鹏”之后的又一次网络狂欢。 “浪漫厨房”对话都市精英 科宝·博洛尼,这个来自亚平宁半岛的家居品牌,已经将视野拓展到整个家居产业,不仅带来超前的意大利设计和高端的德国安装标准,并一直致力为中国的都市精英们带来更精致的生活方式的体验。 科宝·博洛尼09年所主打的“浪漫厨房”的品牌内涵,体现在三个方面上,一种态度:对时尚遥遥领先的把握,纵览云端的设计潮流;一种格调:激活沉淀于心底的浪漫因子,让生活艳丽绽放;一种力量:柔软女性主张的极致表现,那抹最令人感动的温暖。科宝·博洛尼全新的“浪漫厨房”,带给我们的不仅仅是全新的产品,更带给我们家的另一种惊喜! 科宝·博洛尼秉承一贯的创新营销思路,率先建立专注塑造用户体验的“家居体验馆”、《奋斗》电视剧中的植入广告、以及在奥运期间的“抢沙发”活动,一直走在行业的前列;这次的“浪漫厨房”推广,科宝·博洛尼展现出更娴熟、更前瞻的手法,制造出了首个成功的跨媒体整合营销案例,再次成为家居行业领头羊。 54 | 体育 调查-您如何看公牛淘汰老鹰 东部决赛与热火相遇?新浪体育讯北京时间5月13日,公牛客场以93-73击败老鹰,从而以4-2晋级东部决赛,将大战新“三巨头”领衔的热火。您如何看公牛淘汰老鹰,东部决赛与热火相遇?(新体) 55 | 时政 我国30%基层医疗机构12月前实施基本药物制度中新网8月20日电 “不迟于12月份,中国各省区市将在30%的政府办城市社区服务机构和县(基层卫生医疗机构)实施基本药物制度”,这是卫生部药物政策与基本药物制度司司长郑宏在今天关于建立国家基本药物制度有关情况的发布会上所作的表示。郑宏说,各地实行的基本药物制度,包括实行省级集中网上公开招标采购,统一配送、全部配备使用基本药物,并实现零差率销售,基本药物全部纳入基本医疗保障药品报销目录,报销比例明显高于非基本药。郑宏透露,接下来,完善基本药物制度的相关配套政策还将陆续出台,包括《国家基本药物采购配送的若干意见》、《医疗机构使用基本药物的管理办法》、《国家基本药物质量监督管理办法》,以及《国家基本药物临床应用指南》和《国家基本药物处方集》两个技术性文件,配合有关部委制定并公布国家基本药物零售指导价格,完成基本医疗保险药品目录的调整工作。郑宏最后表示,初步建立国家基本药物制度是一项全新的制度,也是医改的重点和难点,其建立和完善有一个渐进的过程,需要充分发挥市场机制的作用和多部门的配合合作,更需要全社会的充分理解、支持和参与。(据中国网文字直播整理)> 相关阅读:上海将免费供应部分基本药品国家基本药物目录化学药品和生物制品部分卫生部称药品企业产能过剩 可能出现兼并重组卫生部:各地可根据需要增加非目录药品卫生部:中药饮片首次纳入国家基本药物目录卫生部:基本药物制度有望从根本解决看病贵卫生部:将发布六个基本药物配套文件卫生部:基本药物零售制药价格11月前出台 56 | 时尚 组图:手拿包时代 超模明星超有腔调导语:是的,“手拿”这个概念从2011的春夏开始风靡,被深刻彻底的运用到包袋上之后,手拿包便疯狂的席卷了我们,直至2011的秋冬秀场完满结束,它依然流行,并持续升温。在2011的秋冬秀场上,我们可以看到,Dries Van Noten,Proenza Schouler,Jil Sander,Celine,MiuMiu,Alexandre Herchcovitch,Hermes,Balenciaga等等,都有运用到手拿包这个元素,设计师们对它可以说是宠爱有加。那些时尚博主,模特,时装编辑,明星们更是争先恐后,不约而同的带着各自的手拿包穿梭在时装周上不同的是,2011秋冬时装周之后,手拿包出现了两个明显的流行趋势。一个是将“手拿”进行到底。在Celine的秀场中,我们的Freja王子侧拿着白底,带有黑色手提的包包,而在Dries Van Noten、Miu Miu等等的秀中,我们也同样看到了这样的拿法。也就是说,甚至连这些有设计手带挎链的提包,设计师们也偏好让模特们手拿出秀。手带的功能逐渐被模糊掉,它们从方便人们背挎这一实际作用,华丽转身为装饰作用,退居为配角,只为衬托整个包包的华美。就这样看来,不管有或者没有手提或手带,想要时尚出街,“手拿”就对了。所以,只好让自己辛苦一点,加油练习手力才是硬道理。另一个趋势则是将颜色调至为透明,在内袋中做文章或者让包包的主人们各自随意的发挥。Maison Martin Margiela的手包有着轻薄的透明质感和极简的长方形线条,Christopher Kane的透明手袋,内里淌着鲜艳的液体,放佛有生命体在流动,而在Charlotte Olympia的方形透明盒子里,可以看到,有设计师细心为我们准备的各种精美内袋,在享受一包几用的同时,你不用因为透明可见的包而必须规范整理自己的物品,害怕私物外露。 这是一个非常贴心的设计,是吧?手拿包,作为一个时尚文化的重要元素,从晚宴,派对走到日常生活中来,从钱包大小到现在成几倍的扩大,从单一的款式到透明质感的包中包。它不再只是为了体现女人味而存在,它也可以是休闲并重中性而出现。我们没有办法拒绝手拿包,至少在这个2011里。它如同去年风靡的裸色系,换过主角之后,又开始新一轮的时尚轰炸。今天的你,“手拿”包了吗? 57 | 家居 百年席梦思申请破产保护 我们能继续购买它吗席梦思因申请破产保护频频曝光长假过后,一条财经新闻引起了不少家居消费者的关注:拥有100多年历史的美国知名床上用品公司席梦思最近宣布申请破产保护,并拟出售给洛杉矶的一家私募股本公司。据美国《纽约时报》近日报道,这是近20年来席梦思第七次申请破产保护,第七次被出售给私募股本公司。这件事让外界十分担心,不少媒体认为其反映了美国经济可能陷入第二波衰退而纷纷报道这则消息。据相关报道,美国是世界上更换软床垫最勤的国家,更换床垫的速度比中国人更换手机的速度还要快。有人归结于美国人床事频繁,消耗大。但百年不遇的金融海啸重挫了美国经济,美国人越来越无心“恋战”,床垫也就此成为了最耐用的消费品。这导致了拥有百年历史的席梦思的销售停滞,业绩严重下滑,不得不寻求破产保护。多个媒体还报道说,床垫指数已成为经济学家观察经济景气的重要指标:经济繁荣时,人们心情愉悦,房事频繁,软床垫自然销售畅旺;而经济萧条时,诸事不顺,贫贱夫妻百事哀,心思不在床上,床垫销量自然直线下滑。[专家解释]绝不能将破产保护与破产画等号自两年前进入南京市场后,席梦思在南京的销售状况正逐渐好转。可是突如其来的消息却在很多人脑海中打上了大大的问号:“申请破产保护后,席梦思床垫还能不能买?”为此,记者咨询了相关法律专家和财务专家。根据百度百科提供的信息,破产保护是指不管债务人是否有偿付能力,当债务人自愿向法院提出或债权人强制向法院提出破产重组申请后,债务人要提出一个破产重组方案,就债务偿还的期限、方式以及可能减损某些债权人和股东的利益作出安排。相关公司要援引《破产法》第十一章来“重组”业务,争取再度赢利。破产公司,也就是“债务人”,仍可照常运营,公司管理层继续负责公司的日常业务,其股票和债券也在市场继续交易,但公司所有重大经营决策必须得到一个破产法庭的批准,公司还必须向证券交易委员会提交报告。南京君远律师事务所姜志民律师在接受记者采访时表示,破产保护主要适用于美国的法律。在他看来,破产保护与中国法律中的“整顿”和“重整”概念比较相近。“也就是说,申请破产保护的企业并不等于破产。只要企业没有正式进入破产程序,是不能随便下论断的。”而圣典律师事务所的朱鑫律师也指出,申请破产保护的企业,其生产和品牌未必会受到影响。另外,“如果席梦思在中国有经销商,而经销商是有独立法人资格的法人,消费者购买其产品,买卖合同的相对方就是其在中国的经销商。按照《消费者权益保护法》,有关产品的质量问题和售后服务问题,消费者可直接要求经销商承担责任。”对于同样的问题,江苏日月星会计事务所所长张卫东则认为,申请破产保护是一种财务整顿。他说:“申请破产保护通常是因为债务难以清偿,为避免债权人哄抢资产而采取的一种保护手段。只要没有正式破产,不会影响产品的生产和销售。”[记者调查]亚洲市场大热南京经销商很乐观席梦思总部因申请破产保护而成为话题焦点,席梦思南京经销商、南京壹线家居用品有限公司董事长余伟俊不急反乐。他说:“以前我们自己宣传席梦思是世界上最大的床垫生产商,很多人不相信。现在经过这么多媒体的报道,所有人都知道席梦思是百年企业,曾经辉煌一时——汽车大王亨利·福特、著名发明家爱迪生、剧作家萧伯纳都曾经为它代言,中国第一个睡在席梦思床垫上的人就是慈禧太后。”余伟俊说,这对于提升席梦思的品牌知名度很有帮助。谈到席梦思申请破产保护的原因,余伟俊说这只不过是公司高层的一些财务整顿手段,变的只是股东,对于席梦思的生产没有丝毫影响。“席梦思在亚洲市场一直很受欢迎,日本、新加坡都卖得很好。在中国香港和内地,销量也不断增加。光是中国香港,今年10月份就卖了1700多万元。”余伟俊向记者透露,席梦思亚洲经营权目前在日本王氏财团手中,席梦思总部曾经出资120亿人民币想要买断亚洲经营权,但是王氏财团都没有卖。“可见亚洲的市场状况有多好。”另据余伟俊介绍,近日将在南京钟山高尔夫举办的奢侈品展也曾力邀席梦思参加。“我们担心参加这次展览的品牌不够高端,所以没有参加这次展会。”据了解,即将接手席梦思的两家私募股权公司同时也是北美最大床上用品制造商“国家床上用品有限责任公司”的老板,该公司旗下拥有舒达(Serta)等著名床上用品品牌。接盘方拟将席梦思和舒达打造成两个有不同定位的独立品牌。收购后,席梦思仍将保持原有的标识、品牌、生产线和管理团队。 58 | 教育 四六级考前调查:这是你第几次报考四六级2010年6月19日四六级考试即将开始了,这是你第几次报考呢?考前是不是觉得很紧张?快来参加四六级考前投票调查吧。如果您对此有自己的看法和观点,您也可以点击此处发表你对四六级的感言。2010年6月19日四六级考试即将开始了,这是你第几次报考呢?考前是不是觉得很紧张?快来参加四六级考前投票调查吧。如果您对此有自己的看法和观点,您也可以点击此处发表你对四六级的感言。 59 | 科技 配18-200mm单反镜头 佳能50D套机售10200外观上,佳能EOS-50D采用是和佳能EOS-40D的机身同样的铝镁合金的外壳材质,使得其拿在手中的质感十分的强烈;50D拥有145.5*107.8*73.5mm的机身尺寸,在机身顶部和左肩位置都更加圆润,机身体积和40D相比也略微增大,但是重量却比50D轻了10g。所以在携带的时候并没有什么太大的问题,在机身的背面,佳能EOS 50D采用全新92万像素3.0英寸LCD屏幕,并且具备更广的色域显示。抑制反射,防污痕防刮擦,即使在明亮的光线下也可轻松浏览,而且还支持实时取景。佳能50D背面采用最新的3.0英寸LCD液晶屏,分辨率达到92万点,可视角度为160度,即使在阳光下,用户也能精准地确认照片细节;机身上新增的HDMI端口让50D可以轻松连接高清电视,更便捷地回览和确认照片。配置上,佳能EOS-50D采用的是一块面积为22.3*14.9mm的APC-S画幅的CMOS传感器,有效像素为1510万像素,能拍摄出最大4752*3168分辨率的照片,搭载的全新的DIGIC 4数字影像处理器,据了解,这个处理器大约是DIGIC 3处理器的1.3倍,镜头的转换系数是1.6,ISO为100-3200,可扩展是ISO 6400和ISO 12800。EOS 50D采用35区测光感应器,测光范围是EV1至EV20,相机提供了评价测光、局部测光、点测光和中央重点平均测光四种方式。此外,机身还带有HDMI接口。编辑点评:功能方面的提升更加突出,EOS 50D新增了实时显示拍摄面部优先自动对焦功能和镜头周边光量校正功能,强化了自动亮度优化和高ISO降噪性能,并支持RAW、sRAW1和sRAW2三种RAW图像尺寸,以及HDMI高清输出接口、92万点LCD(VGA)等, 都离不开DIGIC 4处理器的强劲性能。EOS 50D在最高分辨率的设置下,连拍速度最快达到约6.3张/秒,配合UDMA (Ultra Direct Memory Access) CF卡,可实现高速的数据传输。   [产品名称] 佳能50D   [参考价格] 10200元   [联系电话] 0531-82397749 60 | 科技 8倍光学变焦镜头 松下ZR1仅售2225元编辑点评:ZR1在外观上依然保留了松下便携长焦一贯的风格,但是内在的变化是相当大的,可以说ZR1是一款定位稍低于ZS系列的产品,但是却用了非球面镜片的8倍光学变焦镜头,对于卡片DC来说非常强悍,更何况还有双倍以往防抖能力,进一步提升了ZR1的应用范围。而且ZR1仍具备25mm的超广角镜头和强大的720P高清摄像能力,性价比不言而喻!喜欢的朋友不妨到下面的商家去看看哈。   [参考价格]:2225元   [客服电话]:13206094985 61 | 时政 澳门新特首崔世安回家乡广东江门祭祖(图)中新社江门八月十六日电 (陈浩光 李健群) 十六日清早,江门市新会区双水镇崔嘉亨村锣鼓喧天,热闹非凡,数百名村民夹道欢迎新当选的澳门行政长官崔世安回乡祭祖。早上十时左右,崔世安及夫人霍慧芬携同亲属一行十多人回到崔嘉亨村祭祖。一进入村口,他热情地向乡亲父老打招呼,还与乡亲们拉起了家常。他说,心中一直记挂乡亲和家乡的发展,衷心感谢家乡人民一直以来对他的支持和关心。在村中祭祖期间,崔世安还给村里的孩子、老人派发利市和巧克力,并摆下五十多桌酒席宴请全村村民,以感谢乡亲一直以来对他和家人的支持和关注。崔嘉亨村外嫁女崔玉敏激动对记者说:“首次见面,觉得崔世安平易近人,没有半点架子,家乡出了他这样的“威水”人物,我们都感到很自豪,希望他以后可以多回家乡看看。”据村长崔松茂回忆,以崔德祺为首的澳门崔氏家族后人在上个世纪五十年代就开始返乡,崔世安在八十年代后亦随同返乡。九十年代起,崔德祺年年春节农历年初八均返乡祭祖,向每户村民派发利市;到崔世安,还增加向六十岁以上的长者派利市。据崔嘉亨村里老人介绍,崔嘉亨村原本是赵家村,为南宋赵氏皇族后裔居住,崔氏族人是从明朝洪武廿六年(一三九三年),由增城的坑背村迁居至此,至今已有六百一十六年历史。后来,赵氏一族迁走,加上村子位于水坑尾,便改名为“崔家坑”,民国期间村里一位名为崔勤的私塾老师为其美名为“崔嘉亨”。目前全村有一百五十多人,全部姓崔。(完)> 相关阅读:崔世安结束北京之行后将筹组第三届特区政府视频:胡锦涛会见澳门第三任行政长官崔世安胡锦涛会见澳门第三任行政长官崔世安(组图) 62 | 房产 三环旁世华水岸推出特价准现房11000元(图)新浪房产讯(编辑 晏阳)世华水岸 (论坛 相册 户型 样板间 地图搜索)推出11000元/平米的特价房,户型130-190平米,共计60套房源,售完为止。主力户型162平米三居,三环旁准现房,即买即住。世华水岸其他户型均价13500元/平米。优惠:一次性8.8折,贷款9.2折。特价房不享受折上折优惠。 世华水岸位于天坛南路南端,凉水河岸北,属南三环、四环之间。向北1600米直接南三环;南侧规划平桥,通连南四环辅路;北侧邻近城铁5号线、10号线站点,1小时内通达全城。住宅总建筑面积21万平米,分为BCF三大区域,容积率1.96,最大楼间距近60米,避免遮挡与对视的发生。特价房不享受折上折优惠。 建筑坚持全板式格局,依托凉水河1600米水岸走势南向展开,结合退台、平台形成开放式规划空间,多室朝阳采光充足。户型面积从90到200平米均有,其中140—160平米你主力三居在布局上既满足传统的通风采光需要,又创造出家庭厅和主卧景观阳台,将窗外美景引入室内,还原公馆大宅的居住本意。    以上信息仅供参考,最终以开发商公布为准。点击查看更多打折优惠楼盘信息.pb{}.pb textarea{font-size:14px; margin:10px; font-family:"宋体"; background:#FFFFEE; color:#000066}.pb_t{line-height:30px; font-size:14px; color:#000; text-align:center;}/* 分页 */.pagebox{overflow:hidden; zoom:1; font-size:12px; font-family:"宋体",sans-serif;}.pagebox span{float:left; margin-right:2px; overflow:hidden; text-align:center; background:#fff;}.pagebox span a{display:block; overflow:hidden; zoom:1; _float:left;}.pagebox span.pagebox_pre_nolink{border:1px #ddd solid; width:53px; height:21px; line-height:21px; text-align:center; color:#999; cursor:default;}.pagebox span.pagebox_pre{color:#3568b9; height:23px;}.pagebox span.pagebox_pre a,.pagebox span.pagebox_pre a:visited,.pagebox span.pagebox_next a,.pagebox span.pagebox_next a:visited{border:1px #9aafe5 solid; color:#3568b9; text-decoration:none; text-align:center; width:53px; cursor:pointer; height:21px; line-height:21px;}.pagebox span.pagebox_pre a:hover,.pagebox span.pagebox_pre a:active,.pagebox span.pagebox_next a:hover,.pagebox span.pagebox_next a:active{color:#363636; border:1px #2e6ab1 solid;}.pagebox span.pagebox_num_nonce{padding:0 8px; height:23px; line-height:23px; color:#fff; cursor:default; background:#296cb3; font-weight:bold;}.pagebox span.pagebox_num{color:#3568b9; height:23px;}.pagebox span.pagebox_num a,.pagebox span.pagebox_num a:visited{border:1px #9aafe5 solid; color:#3568b9; text-decoration:none; padding:0 8px; cursor:pointer; height:21px; line-height:21px;}.pagebox span.pagebox_num a:hover,.pagebox span.pagebox_num a:active{border:1px #2e6ab1 solid;color:#363636;}.pagebox span.pagebox_num_ellipsis{color:#393733; width:22px; background:none; line-height:23px;}.pagebox span.pagebox_next_nolink{border:1px #ddd solid; width:53px; height:21px; line-height:21px; text-align:center; color:#999; cursor:default;} 63 | 游戏 《霸王II》活动频出玩家乐翻天手机网络游戏《霸王II》近期的游戏活动与客户端的更新频繁不断,层出不穷。在让玩家们体验到游戏多元化,积极参与活动之外也让不少玩家眼花缭乱。今天我们就来总结一下《霸王II》近期的所有活动以及更新总汇,让玩家能一目了然,增加大家参与活动的激情。除了刚刚结束的新区冲级送大礼等四个活动之外,有近百名玩家获得超级话费大礼,《霸王II》还在进行的红人堂活动也给所有参与的玩家准备了大奖。《霸王II》雄霸天下征文活动获奖名单也已经在近日揭晓,目前还有四位获奖玩家没有回馈官方自己的游戏获奖信息,其他玩家奖励已经发放到位,请没有回馈信息的玩家抓紧时间了。近期,根据论坛管理需要,《霸王II》还在为官方论坛招聘版斧数名,详细情况可以见官方论坛置顶帖,有精力有兴趣的玩家可以来参加哦。游戏更新方面近一周内《霸王II》更新了许多的游戏相关的新功能,跨国杀人时玩家在杀低于40级的玩家,等级差大于等于10,小于20,扣5点;等级差大于等于20,扣12点,40级以上的随便杀,等级差在10以内的也随便杀。还有30级以下的《霸王II》白名玩家,在野外1小时内被杀3次后,该玩家会处于系统保护状态还有《霸王II》独创的GM诅咒功能,对于使用非官方版本的游戏客户端玩家会被系统提示被GM诅咒后,降低角色速度属性等相关数据。这样也让《霸王II》的游戏世界更加公平更加稳定。《霸王II》一切活动与更新都为了玩家,指游秉承为玩家一切的理念与想法运营游戏,更多游戏功能更新与活动还在不断策划中,精彩无需等待!感情真!PK爽!宠物,帮派,副本……统统拿下!《霸王II》震撼登场!公测,新区进行时!《霸王II》下载方式:直接手机登录官网bw17.cn下载即时pk手机网游霸王! 64 | 游戏 玩家初识手机网游《诛神》体验之旅在好友的介绍下初识诛神这款游戏。那时想去找朋友出去玩,谁知才一进他的房间,便听见一阵诡异又滑稽的笑声,我上前一看,他捧着手机在玩游戏,画面中一个角色正骑着坐骑威武无比。“这是什么游戏啊?”我好奇的问朋友。“诛神你都不知道,你OUT了”他显然正被剧情吸引,一边操作一边随口抛下一句。“是一款手机网游吗?”想想现在大同小异的网络游戏,我就兴趣缺缺,打怪练级聊天交友,没有情节没有故事,实在很难吸引我这个忠实的RPG迷!才想叫他出去逛街,却见他神秘兮兮的回过头来,眼里放着如同胖和尚一般的怪异光芒!“这个不一样哦!”他贼贼的笑笑,“诛神可是一款最火爆的手机网游哦!”“哦?”我从他手中接过手机,怀疑的看看他:“诛神?是可以上网与其他玩家交流的那种?这种手机网游倒是头一次听说。”朋友笑而不答的故作神秘,只一个劲的让我回去试试!“试试就试试吧,别拐我玩手机网游,我是死忠pc派!”我将手机还给他,信誓旦旦的撂下话!就这样,我开始了在《诛神online》中的旅程!才一开始游戏,我便被那精致的画面、神秘的情节所吸引,浏览四种职业说明后,我选择了我最喜欢的职业,近战之王“力士”作为我在《诛神online》梦开始的起点!初看游戏画面,真的令我很吃惊!不知是我太土了,还是…没有想到手机游戏的画面能够做的这么好,我这还是第一次,听着里面的配音,看着搞笑的对白,我才刚刚放松我的神经,仔细研究这个游戏究竟是如何开始……刚进入游戏便有npc热情的与我打招呼,就这样我接到了第一个任务,得到了我的第一次经验奖励、第一笔收入。虽然经验和钱不是很多,但是那种亲切感真好,觉得自己已经开始融入到游戏中了。做了几个任务,我终于明白在说起“诛神online”这个词时,朋友亦常坚定的说和我胃口的原因,手机网络游戏就是剧情在长也总有玩尽的时候,但是不断更新的任务,让我想玩多久就玩多久,想怎么玩就怎么玩,我总是能从新的任务中得到我想要的情节。在我完成这些任务的同时,我渐渐的能够接到比较复高难度的任务,逐渐了解团队合作的重要性,这就是我的诛神online之路了,写出来与各位玩友共享。 65 | 教育 08年12月六级听力篇章3原文(昂立版)2008年12月六级听力Passage 3原文In many stressful situations the body’s responses can improve our performance. We become more energetic, more alert, better able to take effective action. But when stress is encountered continually, the body’s reactions are more likely to be harmful than helpful to us. The continual speeding up of bodily reactions and the production of stress-related hormones seem to make people more susceptible to heart disease. And stress reactions can reduce the disease-fighting effectiveness of body’s immune system, thereby increasing susceptibility to illnesses, ranging from colds to cancer. Stress may also contribute to disease in less direct ways by influencing moods and behavior. People, under stress, may become anxious or depressed and as a result may eat too much or too little, have sleep difficulties, or fail to exercise. These behavioral changes may in turn be harmful to their health. In addition, people are more likely to pay attention to certain bodily sensations such as aches and pains when they are under stress and to think they are sick. If the person were not under stress, the same bodily sensations might not be perceived as symptoms and the person might continue to feel well. Some researchers have suggested that assuming the role of a sick person is one way in which certain people try to cope with stress. Instead of dealing with the stressful situation directly, these people fall sick. After all, it is often more acceptable in our society to be sick and to seek medical help than it is to admit that one can not cope with the stresses of life.Questions 32 to 35 are based on the conversations you have just heard.Question 32:What does the speaker say about people who encounter stress once in a while?Question 33:What does speaker say frequent stress reactions may lead to?Question 34:What are people more likely to do when they are under stress?Question 35:What does the passage mainly talk about?     更多信息请访问:新浪四六级频道 四六级论坛 四六级博客圈特别说明:由于各方面情况的不断调整与变化,新浪网所提供的所有考试信息仅供参考,敬请考生以权威部门公布的正式信息为准。 66 | 家居 装修工需持证上岗 施工不得扰民  本报讯针对小区住宅装修时存在粉尘污染、噪声扰民等问题,昨日,市建委、市房管局联合发出通知,明确装修工人必须持证上岗,装修企业施工时不得扰民。同时,物业公司要负责起在施工现场巡查监督的责任。装修工人须持证上岗通知要求,从事住宅装修的企业和设计、施工、监理人员,均要取得相应的资质证书和资格证书,否则不得上岗作业。业主在装修前,应向物业公司申报登记,提供有效身份证件、装修方案和装修企业有关资料。业主自行装修的,负责室内水电气等管线施工的人员也必须持有相应的职业资格证书。装修时不得扰民通知要求,装修企业应当在施工现场挂牌,明示企业名称、施工负责人姓名及联系方式、开竣工日期和市装饰装修管理机构的监督电话。由装修企业负责采购装饰材料的,严禁使用国家明令淘汰的材料和设备。在装修过程中,装修企业应妥善解决在供(排)水、供电、通行、采光、环境卫生等方面出现的问题和困难,避免或者减噪声、粉尘和有害气体对周围居民的影响。装修完成后,装修企业应向业主出具工程质量保修单和采购的主要材料、设备的质保书、说明书以及管线竣工图,由业主进行验收。保修期内出现问题,装修企业必须履行保修义务。业主装修,物业要巡查监督通知还对物业公司在业主装修时要进行监督,物业公司要经常巡查施工现场,严禁无资质企业承接住宅装饰装修工程。对发现的违反规定的装饰装修行为,应当予以制止,要求其立即纠正。不听劝阻、不予纠正的,物业公司要及时向市装饰装修行业管理办公室报告。同时,物业公司应严格遵守市物业服务收费管理办法的规定,不得在业主装修时另立名目收费。监督电话:郑州市装饰装修行业管理办公室(0371)67188991、67188992。郑州市房管局物业处(0371)67889710、67889711。 67 | 体育 库班因孩子而变得成熟 特里:德克只差总冠军戒指新浪体育讯北京时间5月13日消息,本赛季季后赛,小牛队的老板马克-库班似乎沉寂了许多,纵使小牛横扫湖人,也甚少见他在电视屏幕上出现,赛后也没见他发表什么高论,这颇为罕见。今天,诺维茨基的接受采访时,透露了库班变化的原因。诺维茨基说:“库班自2006年总决赛小牛队负于热火之后就已经慢慢的改变了,他努力的不使自己的场外言行影响到球队。他还是那么的充满激情,他仍旧是超级球迷,仍旧是发自内心的支持我们,有些时候,他还会高喊,但现在,他已经注意场合了。他不再是那个他,他仍旧是我们的老板,但变了个样。”、诺维茨基说,库班的改变或许是从他变成了一个父亲开始的,“家庭因素总是能影响你。以前,我们的每一次训练,他总是参加我们的每一次客场旅行,他总是跟着去,但现在,他不这么做了。这并不表示他不再关心和关爱这支球队,只是家庭和孩子让他有了更多需要关心的事情。”其实,不止是库班发生了改变,诺维茨基也变了。和以前相比,诺维茨基变得更加成熟,更加镇定自若。卡莱尔教练在前日接受采访时说,诺维茨基已经跻身历史前十位,今天,特里在谈到诺维茨基时表示,他的伟大已经不需要什么证明,只欠缺一个总冠军戒指。“他至少是历史前50位,前50位伟大的球星,我知道,以前排过这个排名,但现在要更新了,”特里说,“我不知道你们怎么看,但在我看来,他是最伟大的球员之一。他训练刻苦,年复一年,日复一日的训练基本功,每天都面对双人包夹甚至是三人包夹。在球场上,他扮演一个领袖。职业生涯早期,许多人曾质疑他这点,但他的确使得身边的队友更好。每天晚上,他都贡献大量的分数,还有谁在球场的两端做得有他这么出色?我认为他已经向世人证明了一切,当然,还差一件事情,那就是总冠军戒指。但纵使如此,他仍然可以跻身历史前五十。”(大脸猫) 68 | 科技 高像素防抖单反 索尼A500套机降价送4G卡 作者:中关村在线 陈亮 (中关村在线数码影像行情报道)索尼A500是一款配备1230万有效像素Exmor CMOS影像传感器,具备机身防抖功能以及三英寸可折叠液晶屏幕的入门级数码单反相机。今天笔者在市场上了解到,A500的套机最新价格调整为4350元,与之前的价格相比有了小幅度的调整,现在购买还随机附送4GB存储卡一张。 69 | 教育 六级阅读理解核心备考词汇归类(A-C) 作者:屠浩民 来源:新东方Aaccelerate v. 加速affection n. 喜爱accessible a. 可接近的,可进入的acknowledge v. 感谢acquire v. 学会address v. 向……讲话alert a. 活跃的 b. 机警的 c. 外国的allocate a. 准许 b. 位于 c. 分配appeal v. 有吸引力applicable a. 适用的assess v. 估价assumption n. 假定abnormal a. 不正常的abolish v. 废除absurd a. 荒唐的accommodate v. 提供膳宿addict v. 上瘾 >I’m ~ed to computer games. Please save me!acquaint v. 使熟悉 > Are you ~ed with that MM?adhere to v. 遵守 >Adhere to your own principleadverse a. 不利的, 有害的 >Adverse circumstances can test a person’s wisdom and courage。aggravate v. 加重 >Smoking ~s cold.     alleviate v. 减轻 >No one can ~ my pain。alternate v./a 交替(的) >a day of ~ sunshine and rain /Day and night ~amplify v. 扩大(声音)>   anonymous a. 匿名的 I received an ~ letter。applaud v. 鼓掌; 赞许> I ~ your suggestion。apt a. 易于 >One is ~ to make mistakes if given too much pressure。array n. 陈列, 一系列>the ~of fruit and vegetables in the supermarketarrogant a. 傲慢的> An ~ man is a self-important person。ascend v. 上升 > The balloons are ~ing。ascribe v. 归因于>He ~d his failure to his small vocabulary。aspiration n. 抱负 Your ~ is your ambition or strong wish。assault n. 攻击, 袭击>A robber ~ed him。assert v. 断言 He ~ed that the thief would come again。assurance n. 保证, 把握 >I give you my ~ that the product is safe and reliable。attendant n. 服务员, 随从authentic a. 真实的, 可靠的>Is Clinton’s biography ~?avert v. 避开、转移 We ~ed a loss 。bond n. 联系bounce v. 反弹breed v. 培育bump into v. 碰见bald a. 秃顶的 A ~ man is considered to be intelligent。barren a. 荒芜的,不能生育的>Without dream, life is a ~ field。bewilder v. 使迷惑 The new traffic lights ~ the man。bias n. 偏见 Bias is prejudice。bleak a. 荒凉的; 凄凉的>a ~futureblur v. 变模糊 >Fog blurred my vision。bribe v. 行贿 >Who bribed the bride? Bridegroom。browse v. 浏览 ~ a web-pagebrutal a. 残酷的=cruel/savage/Cconfront v. 面对crude a. 未加工的 ~ oilconvey v. 传达collapse v. 坍塌campaign n. 运动category n. 种类cease n. 停止chaos n. 混乱component n. 部件confess v. 坦白constitute v. 构成consistent a. 一致的consultant n. 顾问controversial a. 有争议的convert v. 转变>convert the hotel into an apartment buildingcapsule n. 密封仓, 胶囊carve v. 刻casualty n. 伤亡人员 Many casualties are reported inthe battle。cater to v. 迎合 > cater to the consumerscaution n. 小心cherish v. 珍视; 怀有>~friendship/~ the hope thatchronic a. 慢性的;严重的circulation n. 循环; 发行(量)>Reader has the largest ~ in China。climax n. 高潮 the ~ of the playcling to v. 紧紧抓住, 依恋;坚持,墨守>The baby clung to his mother./ ~ to the hope that……coincidence n. 巧合collaboration n. 合作 in ~ withcollide v. 相撞; 冲突 The two opinions ~ with each other。commence v. 开始commute v. 乘车上下班compact a. 紧凑的, 结实的 a ~ car/officecompensate v. 赔偿compile v. 汇编, 编辑 ~ a encyclopediacomplement v. 补充,与。。。相配compliment v. /n. 赞美comply with v. 遵从compulsory a. 必做的 ~ educationconceive of v. 构想 I can’t ~ of why he did such a stupid thing!confidential a. 机密的conform to v. 遵守 ~ to the local customsconsequent a. (作为后果) 随之发生的 lack of electricity and the ~ loss in economyconserve v. 保护consolidate v. 巩固contaminate v. 污染 If you ~ something, you make itdirty。contemplate v. 沉思; 凝视 >You must ~ the results of the action。contempt n. 轻视confine v. 限制corrupt a./v. **的; 腐蚀 ~ officialscozy a. 舒适的 a ~ bedroomcounterpart n. 对应的人或物criterion n. 标准 =standard = gaugecynical a. 愤世嫉俗的> a ~ young man is a angry young man    更多信息请访问:新浪四六级频道 四六级论坛 四六级博客圈特别说明:由于各方面情况的不断调整与变化,新浪网所提供的所有考试信息仅供参考,敬请考生以权威部门公布的正式信息为准。 70 | 体育 直击-灰熊新秀三分再还魂 英雄康利险成历史罪人 新浪体育讯加时战,雷霆依靠着已经找到手感的核心凯文-杜兰特一路领先,其间裁判曾有一次争议的出界球判罚。最后17秒,威斯布鲁克失误,拿球后发动反击的康利却在突然出手三分,此时他们106-107落后仅1分,所谓成也康利,亏也在康利。无奈必须选择犯规的灰熊,先后失去了康利和梅奥(6犯离场)。但在最后9秒,灰熊却依靠瓦斯奎斯的超大三分球追平比分。杜兰特最后时刻三分球没中,再次错过绝杀机会,双方进入第二个加时。(西哈诺) 71 | 时尚 组图:豪门媳妇王艳气质一流 穿衣经简单显贵气导语:因《还珠格格》走红的王艳,早年嫁做富人妇。深得婆婆家人的喜爱,能干的丈夫承担家外事,大胖儿子球球聪明机灵。王艳成为女星艳羡的对象。海边度假,遮阳的草帽不可少,王艳一身藏青色的休闲装,和幽静海水浑然一色,放松就要做到天人合一。贵族少不了马术运动,更何况王艳的夫家还是爱新觉罗氏的亲戚,专业的装束才能更好的运动。豪门媳妇王艳气质一流的穿衣经,简单显贵气。 72 | 家居 装修团购调查团购是陷阱还是馅饼“谁装修,不团购?”一度,团购俨然成了消费者运用集体智慧与力量,与家居商家博弈获得优惠价格的一种省钱新途径。但在近日,记者通过网络做得一个团购人气指数调查显示,虽然90%左右的已装修或正装修业主都曾参加过建材、家具团购,但同样有80%的业主有团购退单经历,只有约20%左右的业主通过团购买到了感觉性价比高的家居产品。近期市消保委有关建材、家具团购投诉的出现与增多,也从一个方面佐证了这个情况。“团购不是新鲜方式,却越来越让人望而却步。”一位网友的评论留言,代表了很多业主的困惑,当各色“团购网”、“团购会”、“砍价团”蜂拥而来,团购究竟是陷阱还是馅饼?近日,记者就杭州的家居团购市场进行了一次深入再调查。三种团购方式各有利弊都说知己知彼,百战百胜。虽说,目前杭州家居界活跃的各种团购多到令人眼花缭乱,但细细梳理,主要形式还是归于三种:第一种是网友自发组织的团购;第二种是媒体、网站还有专业团购公司第三方组织的团购;第三种就是经销商自己组织的团购。一是自发团购。多出现在新交付,待装修业主比较集中的新小区。通过利用各大网站上的业主论坛,你可以邀请同小区或者同片区的楼盘业主,一起自发组团去购买水泥、黄沙、板材、电线、油漆等建材类产品。如果采购量大,不仅可以压经销商的价格,还可以直接去工厂进货。如果领队的是个谈判高手,或许你还能省一笔运输费用,享受免费送货上门服务。缺点是,没有第三方从中斡旋,自发团购如果与商家产生矛盾容易僵持。此外,由于每个人的爱好风格不同,团购规模一般不会很大,商家给的折扣也相对有限。二是第三方组织的团购。由第三方将商家和消费者组织起来,在特定场地由很多品牌共同参加的团购活动。这是目前比较活跃的一种团购方式,消费者认可度也较高。主要组织者是专业团购的网站与媒体。记者大致查了一下,目前活跃在杭州的家居团购网站至少有杭州团购网、合力团购网、杭州家装团购网等十多家,再加上报纸、广播、电视等媒体组织的团购活动,第三方组织的团购频率最密集,装修旺季几乎每周末业主都能在杭州捕捉到团购会的“影子”。但由于组织者公信力强弱,参加的商家品牌度比例不同,第三方组织的团购质量也参差不齐,不排除第三方机构为了赚取组织费与广告宣传费,让大量杂牌鱼目混珠。三是商家自己组织的团购。品牌商家自己组织的团购活动,一般会拿出几种产品,联合所有店面以特价搞活动推广,以增加品牌的人气或增加市场占有率。最近新流行的一种营销方式是,直接飞到厂家所在地买建材家具。近日,圣德保陶瓷刚刚在杭州组织了一次“飞到佛山抢陶瓷”活动,报名参加的业主不仅能买出厂价产品,还能享受免费吃住游,100多户业主共下单230万元的产品。商家团购价格是放到了底,但硬伤是,无法突破单一品牌团购的局限性,为了弄齐装修所需的建材、家具品牌,消费者势必仍要奔波。网友教你三招防陷阱秘技如果只参加团购,对价格、产品等信息的了解就少;如果不参加,又可能会错过团购的低价格。所以,对于待装业主而言,建材、家具团购是必须参加的,但也一定要谨慎对待,尤其是如今陷阱重重的网络团购。为此,记者专门请教了几位对团购经验丰富的家装达人,希望帮助消费者在参与团购过程中,跳过陷阱,找到馅饼。秘技1:别太相信砍价师砍出的“赔本价”网友:小猪懒懒团购现场,气氛热烈。最经常出现的一幕是:砍价师一出马,商家最后只好无可奈何出血卖“赔本价”。“赔本价”会不会只是一幕合作演出呢?如果场场都是亏本买卖,商家为什么还乐此不疲地参加团购?所以,别太相信砍价师砍出的“赔本价”, 据知情人透露,现在的网络团购都会向商家或参与企业收取一定的广告费与组织费,费用从2000元-20000元不等。或许打折的幅度和底价早就已经定好了,就等着你现场冲动下单呐。为了谨防“赔本价”忽悠,参加团购会之前,还是老老实实先去一趟卖场做个暗访,确定要买的型号,摸清价格底线。那么团购现场要不要下单就心中有数了:团购的产品是不是自己要的型号,价格是不是便宜,一目了然。对于懒人,还有一招是屡试不爽的。如果你平时忙,懒得跑市场看产品,通过团购摸清产品底价也是个不错的办法。参加一次大型团购活动,就能一次记下十几种品类、数十种产品的价钱,但现场不用急着订,问清楚有效期、是否可退,看好想要的品牌和款号,再慢悠悠去市场比折扣好了。秘技2:参加有第三方监管的团购网友:愤怒的火烧云现在的团购实在多得眼花缭乱。大部分业主参加团购是为了便宜的价格,但请注意,这种价格的优势必须与优质的产品、售后服务画等号。有些无良商家摆出的样品是优等品,等送货到家后就会发现,产品的花色质地要比团购会上看到的差很多。这时商家送的是二级、三级品甚至次品。若团购的售后没有保证,商家不给换货或要求加价的可能性都很大。所以,在选择参加团购时,要确保团购的组织者有第三方的监管,万一出现售后服务等问题,可以有地方投诉。有的团购组织举办一次就走人,遇到问题商家就跟你扯皮,很难保证消费者的最终利益。而那些自发组织的团购活动,除非很熟悉的人一起参加,最好不要去掺和其中。此外,不管参加团购与否,都应该选择品牌,品牌产品价格贵,折扣也低不了太多,但是售后的确不错,可以省去很多麻烦。秘技3:保留发票先别急着付全款网友:叮叮猫现在很多来参加团购的商家都只带几款样品,大部分消费者在团购现场看不到实样。这种情况下,即使商家给的价格很优惠,也不能交全款,可以考虑缴纳少量定金。很多时候,团购组织者会打着某大品牌的名义来吸引消费者,但实际上现场参加的大品牌很少。现场很多杂牌虽然价格很低,但产品质量、服务等各方面都无法保证,而且不像大品牌在市场上有统一价格。有的小品牌还可能在辅料上做文章,原本免费赠送的可能收费,或者干脆将辅料加价。虽然主材便宜了,但七七八八的费用一加,反而比市场价还要高。如果现场签合同,一定要注明产品的材质、产地、等级。验收时要多加留意,保留发票、单据,甚至谈话记录等相关单据。以便于事后退货或者维权。【记者手记】 人声鼎沸时,请擦亮眼睛团购,原意是“团体采购”。这种消费形式一度让不少消费者因团结的力量而振奋。但随着团购网站、职业团购组织的蜂拥而来,团购,到底是“团体受惠”还是“团体挨宰”?在心里不禁打了一个问号。“现在的团购,尤其是网络团购,往往是杂牌当主角,品牌当陪衬。”在采访中,一位知情人士说了自己的担忧,由于一些卫浴、橱柜、瓷砖等大品牌建材商严控价格体系,有自己健全的营销渠道,并不是第三方团购组织者的主要客户群。团购的火爆,反而为一批小品牌,甚至假冒伪劣品牌打通了畅销的“市场脉络”。据了解,由于中小建材品牌的代理商的定价权都比较灵活,利润空间也大,可以根据团购活动的具体情况随时调整价格,容易制造低价效果,成为了不少团购网站常年合作的“座上宾”。这多少让记者明白了团购的退单率为何与日俱增。都说“买的永远不如卖的精”,团购,到底是陷阱还是馅饼?在团购现场人声鼎沸之时,我们或许更应该学着理性地擦亮眼睛。 73 | 时政 老挝人民革命党总书记朱马利抵达昆明开始访华新华网昆明9月6日电 (记者杨跃萍) 老挝人民革命党中央委员会总书记、老挝人民民主共和国主席朱马利·赛雅贡6日中午抵达云南省昆明市,开始对中国进行为期8天的工作访问。朱马利是应中国共产党中央委员会总书记、中华人民共和国主席胡锦涛的邀请,对中国进行工作访问的。 74 | 体育 热火vs凯尔特人先发:迈阿密不变应战 大鲨鱼复出新浪体育讯北京时间5月8日,热火客场挑战凯尔特人,目前双方总比分热火2-0领先。本场比赛成为绿军的生死战,一旦输球,将命悬一线,尽管球队目前伤兵满营,不过奥尼尔将会复出。热火方面则是阵容齐整,力争拿下本轮系列赛的赛点。以下是双方详细首发。热火:毕比、韦德、詹姆斯、波什、伊尔戈斯卡斯凯尔特人:隆多、阿伦、皮尔斯、加内特、小奥尼尔(carry) 75 | 娱乐 《圣诞传说》花絮曝光 解密贺岁档唯一魔幻电影新浪娱乐讯 今年贺圣诞档期中有一部难得的圣诞题材影片《圣诞传说》,关于圣诞老人的故事有千百个版本,但由于传言此片的编剧是根据几年前接到的圣诞老人来电而写出的剧本,所以除了改片魔幻得题材,大家对故事本身也充满了期待。怀着对圣诞老人与电影本身的好奇和期待,新浪娱乐独家连线了《圣诞传说》的制作公司负责人Aleksi Hyvärinen先生。新浪娱乐:听说《圣诞传说》的编剧Juha Wuolijoki先生曾经接到一个神秘的来电,据说是圣诞老人的来电,这件事情是真的吗?Aleksi Hyvärinen:Juha Wuolijoki先生确实接到过这样一个电话,也是因为这个电话,他探访了芬兰的拉普兰,传说真正的圣诞老人就从那里长大并一直住在那里。他在拉普兰找到了一个秘密地点,这让他相信给他打电话的人真的是圣诞老人。新浪娱乐:听起来很有意思,那电话里“圣诞老人”都对他说了什么呢?Aleksi Hyvärinen:电话里“圣诞老人”说想对世界说出他生活里真实的故事,Juha Wuolijoki先生说电话很简短但是很神秘,提供了许多线索,所以他后来去了拉普兰。整个电影就是根据这个电话的内容而拍摄的。新浪娱乐:听说这部电影的拍摄地就在圣诞老人的故乡,是这样吗?Aleksi Hyvärinen:是的,我们拍摄这部电影在芬兰的最北部拉普兰,大家可以在影片里看到那里的景色有多美,所有的地方都是白色的。但是那里非常冷,温度在-35摄氏度以下,所以我们的剧组住在离拉普兰2个小时车程的地方,而拉普兰的白天只有5个小时,整个拍摄过程非常辛苦。新浪娱乐:原来圣诞老人是在这样的环境下长大的,很艰苦啊!Aleksi Hyvärinen:哈哈是的,我们在在冻湖冰超过80米深的地方,矿山100米的地下拍摄。剧组用的电线经常被冻得像干面条一样,工作人员都不能佩带镜片,因为眼镜马上就会和鼻子被冻在一起。 我们与鹿,马等动物一起在几米厚的雪地里工作。对于所有的工作人员来说,那都是一段令人难忘的经历。PS:做为今年最后一部进口大片,《圣诞传说》将于12月19日在中国各大影院覆盖上映,每位观看电影的观众都会得到圣诞老人的青睐。只要观众将影片赠送的限量纪念明信片填写上自己的地址和联系方式交还给影院,就有机会赢得芬兰国家旅游局提供的魔幻芬兰之旅的大奖。另外,参加新浪独家策划的“看《圣诞传说》,答题赢大奖”就有优先机会获得影片限量纪念版明信片,得到赢取大奖的机会!今年圣诞节,《圣诞传说》将带你去芬兰约会真正的圣诞老人。 76 | 时政 台当局通过灾后重建条例草案中新网8月20日电 台当局“行政院”院会今天通过“莫拉克台风灾后重建特别条例草案”,将以3年期限在1000亿元(新台币,下同)额度内完成重建,重建原则是在确保安全无虞情况下“从宽、从速、从简”。据“中央社”报道,台“内政部次长”林中森中午表示,草案参酌921震灾重建暂行条例订定,规范公共设施复建与人员安置,简化很多重建手续。他说,将来危险地区不能再列为居住地区,不适宜居住地区在土地规划下应迁移地点,涉及土地与建物补偿,草案也会建立取得迁移土地优惠与简化手续机制。林中森表示,安置土地若属公有土地或公营事业土地,可无偿提供灾民土地使用权,结合“政府”与民间力量重建。只要经专业勘选,在安全无虞前提下,所有手续都简化,并松绑土地使用法规。他说,公共设施重建也很重要,道路、桥梁建设也有松绑法规机制,基本原则是“从简、从宽、从速”,有信心不到3年时间就完成重建,目前已拨给地方66亿元重建。中新网8月20日电 台当局“行政院”院会今天通过“莫拉克台风灾后重建特别条例草案”,将以3年期限在1000亿元(新台币,下同)额度内完成重建,重建原则是在确保安全无虞情况下“从宽、从速、从简”。据“中央社”报道,台“内政部次长”林中森中午表示,草案参酌921震灾重建暂行条例订定,规范公共设施复建与人员安置,简化很多重建手续。他说,将来危险地区不能再列为居住地区,不适宜居住地区在土地规划下应迁移地点,涉及土地与建物补偿,草案也会建立取得迁移土地优惠与简化手续机制。林中森表示,安置土地若属公有土地或公营事业土地,可无偿提供灾民土地使用权,结合“政府”与民间力量重建。只要经专业勘选,在安全无虞前提下,所有手续都简化,并松绑土地使用法规。他说,公共设施重建也很重要,道路、桥梁建设也有松绑法规机制,基本原则是“从简、从宽、从速”,有信心不到3年时间就完成重建,目前已拨给地方66亿元重建。 77 | 体育 输首场湖人胜出概率仅四成 洛城之战小牛已占先机?新浪体育讯小牛今日客场拿下系列赛第一场胜利,为系列赛的胜利开了一个好头。事实上,要想在七场四胜的七番大战中击败湖人,击败禅师领军的球队,首场获胜,是一个必须的条件。为何这么说?细数历史,湖人队或者不如说禅师麾下的湖人队在具备夺冠实力而又未能夺冠的两年,最终被淘汰,皆是因为未能拿下首场比赛而导致整个系列赛告负。2004年总决赛战活塞,湖人坐拥主场优势,但被老帅拉里-布朗偷得一盘胜利,导致整个局面被动。活塞士气大振,一鼓作气在主场连下三场,成为NBA史上第一支成功在2-3-2赛制下守得低顺位种子三个主场的球队。2008年总决赛战凯尔特人,亦是如此,因为常规赛成绩不及对手,失去主场优势。湖人队先折两场,接下来又不能成为第三支全部拿下3个主场胜利的低顺位球队,最终第六场客场告负。即使是2006年季后赛第一轮面对太阳,遭遇1比3的大翻盘,和第一场的失利也不无关系。七番系列赛第一场告负,无论其是在主场还是客场,都会大大的影响季后赛系列赛的进程。湖人队近几年几次在季后赛的征程中遇险,也都和第一场主场告负有关。还是2004年季后赛,湖人队在西部半决赛遭遇马刺,前两场客场告负,虽然回到主场拿下两场,但第五场如果不是小鱼费舍尔O.4秒的奇迹,拿下本场比赛,这个系列赛的胜负还未有可知。2009年季后赛,火箭球迷至今还记得那个系列赛的进程,火箭队从湖人队的主场拿下了一场胜利,但姚明在第三场比赛中受伤影响了整个战局,他也从此再没有健康的回到过球场。即便如此,火箭队仍然顽强的把湖人拖入了第七场决战。纵观禅师20年执教生涯,在七番决战中,但凡他抢下先手,没有哪个系列赛最终胜利者不是他。但在丢掉首场之后,2004年以来,七次出现此种情况(包括首轮面对黄蜂),湖人最终拿下系列赛的只有三次,概率大大降低。小牛今日客场取胜,堪称叩开了战胜湖人的第一道门,也让这个系列赛的悬念陡然丛生。最终命运如何,让我们看看诺维茨基和他伙伴们的吧。(大脸猫) 78 | 时政 大陆对台湾灾区捐助总价值超过3亿元中新网北京八月十九日电(记者路梅) 中共中央台湾工作办公室主任王毅十九日在北京会见以高金素梅为团长的台湾少数民族代表团时表示,截至今天,大陆社会各界对台湾灾区的捐款已达二亿七千万元人民币,捐赠物资折合三千万元人民币,总价值超过三亿元。王毅表示,此次中台办还专门募集二千万元人民币,通过代表团捐献给台湾少数民族受灾家庭和同胞,帮助大家战胜灾害。(完) 79 | 体育 洛城专家力挺湖人翻盘:一场胜利就能让他们活过来新浪体育讯北京时间5月6日消息,洛杉矶湖人队在西部半决赛中以0比2落后,可《洛杉矶时报》的专栏作家TJ-斯莫斯并没有失去信心,他相信菲尔-杰克逊有能力带领球队走出低谷逆转击败达拉斯小牛队。我(斯莫斯)仍然相信湖人队将会在七场,或者是六场击败小牛队。如果湖人队被淘汰,这将是四年来第一次他们没有战斗到六月,这也意味着洛杉矶的记者们可以提前放假。不过,不幸的是,我不相信杰克逊已经忘记如何执教,即便他已处于半退休状态。科比-布莱恩特也不会轻易认输,至少从球员的角度,他的情况并不差。如果有机会缩减记者们的假期,他肯定愿意这么做。只需要一场比赛,湖人队就可以恢复常态,罗恩-阿泰斯特的禁赛也许是个机会,他在防守中的贡献在进攻方面抵消了。史蒂夫-布雷克没有被禁赛让人颇感意外,他在斯台普斯中心也有不理智的举动,只是没人受伤而已。杰克逊会继续保护保罗-加索尔,因为他真的很喜欢西班牙人。任何为加索尔说好话的人都听上去很可笑,他必须要找到把球投进的方法。菲尔喜欢加索尔是因为他们两个人很像,加索尔也很听话,不过西班牙人不是一个硬朗的球员,三年前在波士顿就早已证明过。今年季后赛的窘境让加索尔显得非常沮丧,没人知道这一切是否会有所改变,但过去两年他已用表现证明了自己,现在的情况与过去没有任何不同,他必须要挺身而出。积极的一点是在达拉斯他会听到更多的嘘声,这与在家的情况相类似。安德鲁-拜纳姆抛出了信任问题,他指出了球队的一些问题,但当泰森-钱德勒在场上完成空中接力暴扣时,每个人都会冲着拜纳姆大喊:“你到哪里去了?”拜纳姆知道他应该出现在合适的位置上去防守,现在他想让其他人知道自己需要支持。橄榄球赛场上的防守会给拜纳姆一些启示,但他还要慢慢学习。对湖人队最重要的就是必须要阻挡住德克-诺维茨基。过去湖人队曾在总决赛中压制过艾伦-艾弗森,今年让克里斯-保罗哑火,因此作为联盟最优秀的教练,“禅师”有能力找到遏制诺维茨基的方法。0比2的总比分让小牛队成为他们想要成为的球队,可这也是湖人队的一个机会,因为他们能够证明小牛队并不具有“冠军相”。与小牛队相比,杰克逊执教的湖人队仍在总体实力上占优,并且拥有更好的季后赛成绩,这支球队没有理由在菲尔执教的最后岁月里崩盘,因此我期待湖人队会在达拉斯赢一场,也许是两场,然后让系列赛回到洛杉矶。如果他们拿下一场,他们回到洛杉矶赢下第五场,接着就是去达拉斯做誓死一搏。假如系列赛进入第七场,那么小牛队的前景就不妙了。在小牛队证明他们能终结两届卫冕冠军前,我始终相信湖人队都是晋级的热门。(Melody) 80 | 时政 七省区市签协议共同构筑国庆安全屏障新华网北京9月6日电(记者崔清新)记者从此间召开的七省区市“护城河工程”工作会议上获悉,我国北京、天津、河北、内蒙古、辽宁、山西、山东七省区市决定启动新中国成立60周年首都国庆安保工作“护城河工程”,携手共同构筑国庆安全屏障。会上,七省区市有关领导同志共同签署了《新中国成立60周年国庆安保工作“护城河工程”工作协议》。共同协商决定:七省区市共同开辟联络沟通渠道,设立24小时联络热线,及时通报情况信息;实施进出京道口安全检查,坚决将各类不安定因素挡在京门之外;启动矛盾纠纷联动处置机制,将矛盾纠纷解决在当地;建立省区市间警务协作,有效遏制跨区域犯罪;落实流动人口服务管理措施,实现对可能危及国庆安全的人员的有效掌控;加大危险物品监管检查和涉危案件的查处力度,严防危险物品流入北京;加大公共安全管理力度,确保公共危机事件得到迅速处置。中央综治委副主任、中央政法委副秘书长、中央综治办主任陈冀平指出,现在距离国庆还有不到一个月的时间,七省区市要加强协作,密切配合,按照中央要求,高标准、高质量地完成国庆安保任务。“护城河工程”是1996年以来北京市与周边各兄弟省区市围绕维护首都安全稳定建立的地区间联防、联控、联调、联打的工作模式和工作机制,在维护首都地区稳定工作中发挥了多方面的综合效益和重要作用。 81 | 时政 审计署公布54部门单位2008年度预算执行情况新华网北京9月1日电 (记者 张晓松)审计署1日发布2009年第12号审计结果公告,公布了54个部门单位2008年度预算执行情况和其他财政收支情况审计结果。审计结果表明,54个部门单位2008年度预算收支基本符合国家有关预算和财经法规的规定,会计处理基本符合会计法、相关会计准则和会计制度的规定,能够认真做好本部门预算编报的组织工作,进一步加强了预算和财务管理工作,建立健全了有关制度。但审计也发现了一些需要加以纠正和改进的问题,对此,上述部门单位均高度重视,并及时部署进行了整改。据审计署有关负责人介绍,2008年,上述54个部门单位共收到财政拨款约占中央财政本级支出的四分之一。审计署自2003年起开始通过其官方网站不定期发布审计结果公告,此前已先后公布了32个部门单位2004年度预算执行审计结果、42个部门单位2005年度预算执行审计结果、49个部门单位2006年度预算执行和其他财政收支审计结果、49个部门单位2007年度预算执行和其他财政收支审计结果。> 相关阅读:中央部门预算执行审计查出问题的纠正情况人大财经委报告2008年中央和地方预算执行情况 82 | 时尚 组图:必看 范冰冰绝美搭配招来朵朵桃花导读:范冰冰雪白肌还是窈窕身都要衣来搭。选对衣服确实让女孩看起来格外有气质。新年到来更要会穿衣,赶快看看美女都怎样穿搭,让你今年桃花朵朵开。水润的玫瑰红透着喜气,映衬范冰冰如雪肌肤。深V领会让脸蛋看起来好似瓜子脸哦。搭配泡泡袖短外套就更有造型感啦。率真一面的显露一定不能错过黑色风衣。金色拉链将风衣装点线条感,配以腰带优化上身比例,穿出小蛮腰就更不在话下了。再经典的黑色也需要演绎,材质的区别也会带来不同肌理的表现。表现不足的内搭卡通TEE有点突兀哦。可爱黑色小帽子,搭配黑色圆框眼镜复古味透着俏皮感。搭配喜气红色大衣显露性格。光感面料运用会格外靓眼与头发色泽呼应,突显垂坠感。鞋子色彩与衣服一直打造整体感。 83 | 房产 北京居住新格局及别墅发展高峰论坛(组图)主持人:各位嘉宾、各位来宾下午好!今天我们在春暖花开的日子里,召开北京居住新格局及京郊别墅发展高峰论坛暨“一个北京城,四个孔雀城 (论坛 相册 户型 样板间 地图搜索)”品牌战略启动仪式。这个是我比较高调说的,比较低调说就是孔雀城和新地产第N次论坛,这个项目和公司,我们新地产是一直跟过来的。我们双方之所以还能这么合作,就是因为我们双方在过去几年里面相知很深,合作的很好,今天的会主要是谈我们的将来,我相信孔雀城从标题上可以看出来,很大,很远,我想可以看出很不一样的未来,包括它和自己的以前,包括它和其他的开发企业,因为很少有连锁的概念以及还有很多大家谈到的惊喜的事情。今天我们很高兴请到的各位嘉宾:FG公司董事长兼总经理方晓光和讯信息首席分析师文国庆北京城市规划学会秘书长、北京城市规划设计研究院高级工程师高毅存亚洲人居环境委员会主席、中国房地产住宅研究会、人居环境委员会副主任委员兼专家组组长开彦《TIMEOUT》中文版主编李多钰京御地产总经理安毅上海话与华营销咨询有限公司董事长华杉福赛联合国际酒店管理有限公司中国区首席代表陈广宇今久广告公司总经理赵宏伟说到地产,有很多叫人惊喜的地方,买房子是生活方式特别重要的一个载体,一个平台。我们请FG公司董事长兼总经理方晓光谈一下这个话题。方晓光:谢谢主持人,谢谢安总,谢谢各位!占用大家一点时间,谈谈关于生活方式和别墅产品的定位问题。我们很关注的一点,随着中国经济社会的增长,中国人的消费方式,生活方式在发生很大的变化,这个变化的一个表现,无疑是很多方面的,衣食住行,尤其是住和行方面,所以住房就是一种生活方式,住什么样的房子,在什么样的地方住,一个地方还是几个地方,这是一个生活方式很重要的表现。我们在原来公司的时候做过四次消费者调查,当时做了很大规模的全国消费者调查,但是这个数据相对过去四五年了,有一点陈旧,但是总的趋势还是有所启发的,这些调查结果两次在财富会议上进行发布,我们当时发现中国消费者十大趋势,中国消费者有不断增强的健康意识,有不断增强的绿色意识,有不断增强的再教育意识,有不断增强的投资意识,风险控制意识,有不断增强的流动性,有不断增强的国际化意识,休闲意识和花明天钱的意识,这个数据是2004年做的。最近刚刚看了一些东西,大家都知道,北京市GDP平均每人达到9000美元,北京市像全国一样,财富的分配不是完全平均的,据国际权威组织讲,北京市的经济指数是0.22,这个我有一点保留,我觉得全国的经济指数是0.4,这个是收入分配悬殊比较大的数据。今天晨报刚刚发表的新的调查结构,北京市有8800人亿万富翁,从财富的集中数据来说,是全国第一的。北京市当年私家车的占有当时不是很多,2004年是16%,现在据说私家车有270万左右,2004年的时候北京市有14%的家庭有第二套住房,低于上海的22%,现在的数据肯定会大大的增长,所以我说给定财富的增长,随着教育水平的提高,人们生活品位和标准的提高,就催生了很多的新的市场,我觉得低密度的,山清水秀的别墅类的产品,作为住房市场来说,是我们整个生活水平提高的集中的表现。在这种情况下,给定这么多的财富,给定这种消费的趋势,给定这类产品的特色和这类产品所供给的无论是土地还是政策的限制,我个人觉得就像刚才指数的纲领给大家介绍指数一样,这个是不奇怪的,市场有一些波动,会有一些应对,但是总的形势应该是看好的,为什么呢?因为这种刚性的需求和有限的供应在人心信心平稳和信心提高的情况下,我觉得别墅型的产品是前景看好的。我看了一个数据,08年尽管房地产有不少的波动,但是08年不管是价还是量,北京的别墅产品是双生的,获得财富之后人追求的是什么?本来我们关心的是有住的地方,以后我们就开始关心住更大的房子,随着我们有更多的财力和时间,我们就关心亲近自然,绿色的环境,关心亲情团聚,也关心地位的象征和时尚的生灵,对我们来说,相比国外,中国的别墅市场更带有奢侈品的味道,更带有时尚生灵和地位象征的味道,而不是简单的住宅。国外也有豪宅,但是相对国外来说,国内的别墅消费,从郊区的生活而言,我们住在郊区,但是我们的郊区生活除了个别的地区,比如说中央别墅区一部分地方以外,还带有中国特色的高端的住宅的消费,在西方,别墅界定为独栋的房子,并不一定说明你的地位有多高,很多普通人都住单独的HOUSE,美国郊区化之后,现在反思是不是有一点过了,但是对于中国人来说,住在独栋的房子里,在很多人眼中就是成功的象征,不是公寓,不是楼,而是独栋的房子,目前住在郊区有一个院子是成功的象征。美国往往住这样HOUSE的人是第一居所,他们平均在上班路上开两个小时的车是很正常的,但是在中国呢,大部分的别墅,对于别墅的业主来说,往往是第二套、第三套房子,而不是第一居所,为什么呢?是因为我们的郊区的社区的结构跟国外是不一样的,国外除了上班的人往中心城市CBD,OFFICE工作之外,孩子是就近就学的,老人就近就医,更多的情况下,我认为是一种奢侈的消费。在这种情况下,我觉得从定位的角度来说,高端的产品属于豪宅,但是也有一些并不一定是千万、亿万富翁就可以买,就会买,也不一定有钱了就会买得起,我跟安总认识多年我们也为孔雀城做过咨询和研究的项目,我们越来越体会到孔雀城实际上是有别于千万级以上豪宅的中上层收入家庭的,或者中产阶级可以消费得起的,甚至可以提前消费的奢侈品,一种提升消费,代表先进的生活方式,但是这种生活方式和国外还是不一样的,我们也未必和国外一样。刚才请教了一下安总,他说5+2变成了4+3,如果我们一般说盖一个小区,盖一系列的别墅,圈起来,就认为这是一个郊区生活是不够的,真正的郊区生活要配备很多的安全资源,一个是学龄前的教育,一个是老年人的医疗,孔雀城做了超前的尝试和努力,而且初见成效,跟优秀的幼儿园联系,这样才可以降低居住成本,才可以实现一个真正的社区,而不是简单的HOUSE,随着这个HOUSE对很多人来说是一个目标,推出这样的产品,中国的消费能力的提高,特别是新兴的中产阶级家庭的出现,尤其是对北京而言,别墅的产品,虽然政府的政策有很多的考虑,也有很多的限制,但是别墅的产品就像很多的其他的产品一样,是有非常广阔的市场的,光是建别墅,卖房子,盖豪宅,还是不够的,真正的变成生活方式,就是你可以在那里实实在在放心的生活,不管几代人,是不是异地来京,但是做到这一点必须要配套,现在我们想到的交通、周边的硬件,更重要的配套是一些重要的社会资源,特别是教育和医疗,以及其他的一些设施,如果作到这一点,就可以引领一种新的居住方式和生活方式,而新的居住方式和生活方式折射出来的是我们社会的成果。谢谢大家。主持人:谢谢方总,方总给中国人住别墅的概念,下面有请福赛联合国际酒店管理有限公司中国区首席代表陈广宇,他们的总部是在西班牙的,我们知道孔雀城在一系列的产品当中有一些方面是借助了欧洲,特别是南欧一些很显著的特点,优点,所以也请陈总给我们讲讲。陈广宇:大家好,其实在做酒店之前,我跟各位一样,在房地产行业从事工作,之前主要做酒店投资,那时候我们也投资了一系列国际酒店品牌,在把他们引入中国落地的过程当中,我发现同质化竞争非常的强烈,很多的商务品牌都没有什么区别,大家都靠规模致胜,形成单一的建筑风格,装修风格,让客户可以得到一个可预期的消费价值。在这样做的过程当中,就类似于现在做星巴克,有时候去一个城市,去一个星巴克的原因不是很好喝的咖啡,而是知道不会太坏,不会给你出乎意料的失望。当你做精致型的连锁品牌这样做是对的,只有这样做才可以控制投资成本,人力成本,当你做奢华品牌这样做就不对的,因为他没有惊喜,没有尊贵感。当我决定出来自己开业,我就和我的几个合伙人,他们也都是地产行业做了很多年投资的前辈,我们开始讨论,要引进一个什么样的品牌。当时其实有四五个品牌可以选择,我们其中选择了这家HUSA,它并不是我们可以选择的品牌酒店最贵的一家,也不是规模最大的一家,但是它是综合效益最好的一家,这家酒店是在1930年成立的,在这之前他们已经有自己管理四五家酒店,他们有80多年的历史,很多时候我们谈创新,但是创新经常会失败,因为拍脑袋的热情和现实的消费情况不同,我们可以追求一些新的理念,但是必须稳中求胜,经验非常重要,他们为我们提供的两样就是有很稳定的经验,当他形成规模效应的时候可以销售,这样可以得到稳定的,有保障的销售的客房率。这个酒店怎么样做到70多年里面开了160多家酒店呢,他们首先建了一个西班牙区全球酒店的预售系统,他们都是和很稳定的创新联合起来的,我们的前任主席西班牙人世界酒店业的主席,第二他有别于我之前在基金里面工作的世界酒店的最大的特征,他是一个私家酒店,资方的投资需要他是不能违抗的,当投资基金需要的时候,酒店品牌可以要求一些条件,但是他没有办法抗拒这个市场,作为私家酒店的品牌,他可以根据专业的敏锐性选择市场,第二个他可以很好的根据市场文化调整自己的酒店特色,而不是很多国际的品牌,它有统一的建设模式,标准的客房数,标准的客房面积,这样很难适应市场。第二个事情,一个好的酒店,必须要有上下游的公关能力,要有销售能力,现在有一些酒店品牌开始做餐饮、宴会服务,但是到现在为止,能够成为品牌的还非常少,在HUSA品牌下面,有三条餐饮链,下面有一系列的餐馆的品牌,第二个是成立于1917年的成熟的餐饮宴会服务品牌,在这个品牌被我们收购以后,我们举办过西班牙皇室的婚礼,欧共体首脑的闭幕宴会,我们曾经伴随着西班牙的皇室出访过很多的国家。在此之外,还有一个我们专门为西班牙大的企业提供企业的餐饮服务,不光可以在餐饮业盈利,通过这样的渠道,可以跟这些企业建立很良好的关系,有助于我们客房的集团销售,在这种情况下,我们的酒店下面衍生出各种各样的酒店形势,包括我们收购了一系列的皇宫,我们把酒店的概念脱离了工厂的概念,形成了独立的风景线,现在我们引入中国的时候,就考虑在中国怎么样说服开发商,我们知道,酒店的开发商很多时候他们要求我们开酒店,并不是因为这个市场很需要酒店,而是他希望用一个品牌去标榜自己地产的优势,告诉潜在的客户这里有更好的居住氛围和条件。在选择这样的项目的时候,我们格外谨慎,我们选择的第一个项目是在杭州的西西湿地里面,很类似于别墅的感觉,因为杭州政府有一个很新颖的概念,在里面除了酒店、公共建筑,有很多的会所,这些会所是以无偿的方式给一些著名的企业、人物使用,比如说我的会所旁边有一个会所是给成龙使用,还有一个给马未都使用,但是他要每年来这里讲两次会。在这种情况下,周围的环境虽然是类别墅的环境,给我们创造了很好的商务氛围和商务市场,为我们的酒店入住提供了保障。从商务酒店,我们说都要做在城市的中心,这是以前的城市布局不一样,大家需要会所,但是当今天的电子信息发展时候,商务会议是改变了,这也是为什么我们可以在这个环境里面结合当地政府的需求,形成一个商务酒店的结合体,而这个结合体并不是在任何的项目上都可以产生的,这并不是资本投资可以完成的,但是很幸运,我们找到了这样的场合,开始了我们在中国的实践。我们讲在中国的连锁经营,其实连锁经营是一个让人非常矛盾的话题,因为我刚才也讲了,当你一旦形成连锁,首先要考虑的是管理成本的控制和市场开拓的可行性,这两者要求您越标准化越好,但是当你要建一个新兴市场的时候,你就要充分的分析他的品牌优势,寻找自己能够随机应变的能力,我相信在急速发展的中国,我们都有很多这样的机会,希望我们可以给各位带来小小的启迪,也希望各位有好的项目推荐给我们酒店。谢谢大家!主持人:谢谢陈总,我相信这个启迪不会是小小的。我们注意到,最近不光楼市有回暖的迹象,还有他的兄弟,股市最近的势头也是不错的,但是这个股市的回暖和楼市的回暖有什么样的异同?下面有请和讯网的分析师,文国庆先生,他一直在这方面很有研究。 文国庆:我想1600点的时候,股市已经降到谷底了,我们也和安总一块探讨这个问题的时候,我说房地产市场的低迷不是偶然的现象,它是整体的金融箫条的具体反映,其实股市和楼市从这一点来说,是一致的。我是多年研究股市的,从1996年一直到现在,快20年了,我一直在分析研究,在最近的七八年,对房地产市场也有研究,实际上我发现房地产市场和股市是互相依存的,但是他们的运行周期有一个差,这个时间差一般来说,四到六个月,也就是说如果股市暴跌以后,基本上当股市暴跌四到六个月以后,房地产市场会随后下跌,但是跌的幅度有所不同,而一旦股市开始回暖,四到六个月之后房地产市场也会回暖。之所以这样,很显然,楼房和股票都是金融产品,当然了,房地产除了金融属性以外,还有消费属性,但是从国家的整个金融系统考察,他们是具有一致性的,他们最大的特点都是要占有货币。如果没有这个期待的话,房屋的需求也不会出现前几年的楼市上涨,楼市出现问题,其实我们更应该直观的感到,先是股市出了问题,当股市出现了暴跌之后,楼市必然暴跌,原因在什么地方,原因主要是楼市发展到了这个阶段,现在房地产市场的发展已经主要是以改善性需求了,引领市场的方向,在这点上,他的消费群体最主力的消费群体,其实是白领阶层或者是白领、金领的阶层,大老板,他们对房地产的影响并不大,他们的量很少,尽管他们的单价很高,但是量很少,真正的大量的不管是别墅还是中高档的房产。去年在股市高点的时候,流通的市值是十万亿,去年最低迷的时候已经跌到三万亿了,这个跌幅70%,你想大量的白领阶层,他们的资金在股市里面都套牢了,怎么会有财产的预期,对于这个阶层的人来说,最大的消费就是房产。如果当你意识到这个因果关系之后,你就知道,股市的长期低迷或者暴跌必然引起房地产市场的下跌,我判断大概四到六个月,也就是今年的二四月份之间,房地产市场基本上可以见底。还有一个幅度的概念,股市涨到多高,应该对房地产市场产生直接的冲击效应,股市的涨幅要超过50%,现在的房地产市场回暖不是偶然的现象。一旦股市涨到3000点以上,房地产市场就不是企稳的问题,而是涨的问题。中国的房地产市场会持续几年的上涨过程,但是中间有什么回调等等,我们可以看到股市的1664点肯定是未来几年的最低点,我认为今年的股市至少要上3000点,甚至可以上4000点,当到达4000点的时候,那时候市场的流通市场会有多少万亿。这么大的市值你知道的,这个三万亿的流通市值对应多大的房地产市场,二十万亿的流通市值会对应多大的房地产市场,大家都可以算出。我们可以看到,深圳本地的房地产是在2008年9月18日见底的,上海的市场见底的时间是在去年的11月1日,深圳房地产市场调整的早,其他的市场晚一些,在这段时间内,股票市场各个板块,房地产板块上涨是最具持续性和最稳定的,房地产股是业界投资人士对房地产市场的提前预期,这个预期大概是半年左右,股市中房地产股的见底比其他的股票都早。所以未来股市是没有问题的,现在已经涨了很多了,未来我相信一定还会继续上涨。我们在房地产市场进行的股票投资基本已经有四到五倍的涨幅了,对股票的涨幅反映了大家对这个行业的信心,刚开始的时候房地产市场非常的悲观,在这个时候,房地产行业投资者是最先知先觉的,这才是股市投资界精英中的精英,他们看到了未来。在去年十月以后几次跟房地产企业家座谈的时候,我都谈到了,你们很悲观,但是我觉得非常看好,房地产现象是金融现象,不是阶级斗争的问题,它就是一个金融的现象,客观的说,我们政府在过去若干年来,在房地产管理方面,确实有一些问题,但是这个问题很复杂,复杂的根本原因在于房地产这个领域是社会财富最集中的领域,涉及的社会矛盾综合而又复杂,不是一两天的。也不是涉及到一两个人的问题。如果政府企图用打压房价的办法促进社会的和谐,这条路是走不通的,如果说在2007年以前,做这种努力还是可以理解的话,当金融危机发生之后,这条路就死了,走不通了,所以因为我们的出口是没有希望了,你不能指望他上涨,跌幅不超过10%已经烧高香了,中国经济发展房地产不启动也得启动。可以适当的发行货币,只要能使经济发展,现在什么招都可以使出来,经济不发展,就业就没有保障。今年这么大的货币投放力度,大家可以想到,2008年前三个季度是无法想象的,所以我们对经济理论,对于货币运行的理论已经有了新的,更加本质的认识,我们看到货币只不过是衡量股票价格的尺度,只有一个货币政策的宽与松,造成的物价上涨并不是最重要的,最重要的是货币政策要导致经济的和谐稳定发展,所以价格上去不上去并不是最重要的,老百姓的生活水平能不能提高,社会的运行链条能不能持续良性的,顺畅的运转才是最重要的,所以2008年四季度以后,中央采取了一系列的政策是果断的,也是正确的,我举双手赞成,这条路还要继续走下去,只要经济没有出现根本的持续性的复苏,这条路就要走下去,因为按照我的分析,我认为西方的货币理论已经崩溃了,那套理论已经不适用了,如果适用美国和欧洲都不会出现那么大的危机,中国没有什么大问题,只不过是房地产没有解决好,而且是在外部经济影响的情况下才出了这样的问题,就像一个人受了内伤,做了手术了,突然外面下大雪,如果你身体强健的话是没有关系的,如果你刚做完手术,是受不了这个折腾的,所以08年我们遇到的就是这种状况,现在我们已经意识到了问题,所以我们的经济问题有解了,房地产市场也有希望了。谢谢大家! 84 | 房产 建国60周年建筑师:齐欣工作室主持建筑师齐欣庆祝祖国60周年华诞,并见证中国房地产为国家经济发展所做出的贡献,2009年8月底至10月,新浪乐居重磅推出“寻访60个房产行业第一”的专题及“6×60”主题活动,全程将联合地产杂志联盟及城市广播联盟,以立体媒体网络穿越时空隧道,寻找证据、证人、证言,探寻房地产行业历史发展过程中的60个第一。齐欣工作室主持建筑师齐欣的六十年寄语:越来越好!我要评论 85 | 体育 灰熊vs雷霆II前瞻包夹?1v1? 兰多夫真的无解吗新浪体育讯被扎克-兰多夫一顿乱拳揍趴下的雷霆,第二战绝对不容有失。面对灰熊双塔(第一战54分23篮板),雷霆必须找到应对办法。詹姆斯-哈登说:“灰熊完全在肉搏,他们首战打得咄咄逼人,我们必须做好准备,第二场再输的话就很难了。”明天9:30,两队将在雷霆主场进行系列赛的第二场较量。数据不骗人,灰熊每场的内线得分高达51.5分,常规赛4场打雷霆这一数字更是达到了场均59分。哈登说:“我们必须把他们挡在内线以外,不能让他们在篮下进攻,尽量让他们在外围出手。他们是联盟中内线得分的领先者,所以我们不能让他们如愿。”在同雷霆的几场对决中,兰多夫有三场比赛打出了30+10的数据,达雷尔-亚瑟说:“扎克告诉雷霆如果他们不包夹他会是什么结果,不过如果他们包夹,扎克会把球分给外线空位的投手,这对他来说不是问题。”兰多夫已经是季后赛最火爆的明星,在黑白马刺后,似乎雷霆也没办法挡住他。在开拓者,尼克斯,快船流浪后,兰多夫终于在灰熊找到了家的感觉。灰熊主帅霍林斯对爱将评价非常高:“我认为扎克就是一生的缩写,当我们年少,我们轻狂。做了不该做的事,慢慢我们长大,成熟,变成更好的人,不管在比赛中还是在一生之中,都是这样。”在联盟顶级的低位防守悍将帕金斯和季后赛盖帽王伊巴卡面前,兰多夫还是这样无法阻挡。难怪就连凯文-杜兰特也在赛后夸兰多夫是联盟最好的大前锋。雷霆主帅斯科特-布鲁克斯说:“扎克在外围出手8次,我们做的还不够,加索尔也是。”兰多夫则对于如临大敌的雷霆根本不感冒:“我们能投篮,能利用掩护,大部分大个子不能做的事儿,我和马克都可以做。”被兰多夫打的很郁闷的帕金斯放狠话要在明天打出真正雷霆的强硬,看来帕金斯要拿出他在凯尔特人的强悍了。预计首发:灰熊:康利、阿伦、杨、兰多夫、加索尔雷霆:维斯布鲁克、索弗洛萨、杜兰特、伊巴卡、帕金斯(田黄) 86 | 财经 谁是抄底基金群体中的失意者张伟霖有人欢喜有人忧,即便是去年底选择高仓位“抄底”的基金们,也不是所有人都很开心。统计显示,在2009年之前成立的222只股票型基金中,从1月5日至3月25日跑赢上证指数(25.85%)的基金数量超过60只,占统计量的30%。而从去年四季度末就已经顺利布局,看多且做多的股票型基金则更是取得了较佳的业绩。据记者粗略统计,在四季度末仓位超过80%的25只股票型基金中,有18只基金的业绩位居222只股票型基金的前1/4。在四季度末仓位超过80%的25只股票型基金中,今年以来业绩超过同期上证综指涨幅的依次有中邮核心、光大量化核心、博时特许、易方达价值成长、广发小盘成长、富国天瑞、国泰金马稳健、光大新增长等。不过,在这部分四季度末相对高仓位的基金中,也有一些在今年以来的业绩表现不如人意,遗憾错过了今年以来A股的“小牛”行情。其中,四季度仓位达83.73%的上投摩根成长先锋,今年以来的业绩为14.21%,仓位为86.29%的富国天惠业绩为18.42%、仓位在87.35%信达澳银领先增长,其业绩为22.37%。而分析其背后原因,无论从选股还是从选时的操作上,上述业绩不佳的基金从今年以来似乎都没有跟上市场的热点与节奏。行业配置防御为上信达澳银领先增长却是在四季度末时就已经持看空市场的观点。该基金基金经理认为,“国内外经济形势虽有波动但仍有可能进一步恶化,各类经济刺激方案将为股市制造不同的短暂热点,但由于整体估值仍未足够便宜,我们认为未来一段时间内的股市仍难言乐观。”而对于一季度的投资,该基金经理表示“仍将谨慎”。因此在行业配置上,信达澳银同样采取了超配机械仪表以及医药,分别达到了18.41%、7.8%。从四季度的持仓情况来看,上投摩根成长先锋是全力押宝于“4万亿”。上投摩根公司相关人士则对记者表示,公司在整体的策略上就是对于2009年的市场保持较为谨慎的态度。四季报显示,上投摩根成长先锋从四季度开始就逐步增加与“4万亿”投资相关的行业,重仓制造业中的机械仪表以及医药。但在具体的配置上,上投摩根成长先锋则是采取十分集中的持股方式,制造业占比竟高达60.31%。而在四季度末,根据渤海基金的计算,股票型基金虽然在整体是超配制造业,但相关股票占比也仅为38.3434%,超过市场标准配置1.4302个百分点。具体到机械仪表以及医药行业上的配置,四季度末全部基金的平均配置水平为11.52%和6.9103%,均略高于市场标配2个百分点左右;而上投摩根成长先锋在上述行业的配置上却是分别达到了25.12%和13.08%,超出一倍有余。但今年以来,超配机械仪表以及医药也许并没有给上投摩根成长先锋带来多少的超额收益。其中截至3月25日,医药指数今年以来的涨幅仅为22.16%,落后于同期上证指数25.85%的涨幅。不过,对于行业配置结构对于基金的影响,仍有业内人士认为可能并非主要因素。好买网基金研究员庄正对记者表示,他通过分析四季度这些基金的持仓行业和持股状况,即假设基金去年四季度的行业配置状况不变,假设行业配置资产涨幅和行业指数涨幅相当,富国天惠、上投摩根成长先锋、信达澳银领先增长的净值涨幅分别只有14.02%、14.94%、14.84%,而与之相对应的中邮核心优选和富国天瑞的理论净值涨幅分别也只有15.07%、14.20%。因此庄正认为,行业配置可能并不是这些基金表现不佳的主要原因。仓位变脸那么又是什么能够决定“小牛市”中基金排名的起落?业内人士认为,能够跑赢大盘的除了精选个股,可能更重要的策略还是要靠仓位的控制。国都证券基金分析师苏昌景称,股票仓位依然是决定基金净值增长的重要因素。但令人不解的是,虽然从四季度的仓位上,上述“抄底失败”的高仓位基金似乎是已经正要开始的“牛年”做好冲锋的准备。然而从各基金今年净值走势的情况看,它们却恰恰是输在了开头。在一月份上证指数增长9.33%的情况下,其间上投摩根成长、富国天惠、信达澳银领先增长等基金的净值增幅却分别只达到了2.21%、3.87%、3.35%。能够借以分析上述“意外”情况的是,根据渤海证券的仓位观测显示,上投摩根成长先锋、富国天惠和信达澳银领先增长等基金无不是在今年初时出现了仓位骤降的现象。在渤海证券1月9日的观测中,富国天惠的仓位降至60%,上投摩根成长先锋的仓位则是降至70%、信达澳银领先增长也降到了60%。而在此后的整个1月中,上述各基金均是维持在这一仓位水平附近,而这也是它们被那些在四季度末时同为高仓位的基金拉开差距的重要原因。可供比较的是,在一季度,仓位观测数据仍一直维持在八成以上的基金中,如中邮核心优选、光大量化核心、博时特许、易方达价值成长等,其间的净值增幅分别为15.19%11.33%、14.35%、12.69%。显然,有人踏准节奏,也有部分基金经理踏空了行情。对此,上海某基金经理表示,他当时也预计作为春节前的业绩真空期,一月的市场可能相对活跃,但他承认没有想到行情这么好。而他认为,当时减仓也是普遍现象,因为在年末为拼排名而增加的仓位,在当时A股涨幅较高的情况下需要兑现一些浮盈和进行操作上的变化。而这些“垫底”高仓位基金的减仓局面,直到春节过后才得以改观。2月6日的渤海证券仓位观测显示,富国天惠、上投摩根成长先锋、信达澳银领先增长的仓位重新回到了八成以上,分别达到85.94%、82.47%、95%。但在2月17日,沪指越过2400点后再次发生调整,但是富国天惠和上投摩根成长先锋的仓位没有大幅下降,2月20日,上投摩根成长先锋的仓位仍维持在82.70%,富国天惠则为72.28%。张伟霖有人欢喜有人忧,即便是去年底选择高仓位“抄底”的基金们,也不是所有人都很开心。统计显示,在2009年之前成立的222只股票型基金中,从1月5日至3月25日跑赢上证指数(25.85%)的基金数量超过60只,占统计量的30%。而从去年四季度末就已经顺利布局,看多且做多的股票型基金则更是取得了较佳的业绩。据记者粗略统计,在四季度末仓位超过80%的25只股票型基金中,有18只基金的业绩位居222只股票型基金的前1/4。在四季度末仓位超过80%的25只股票型基金中,今年以来业绩超过同期上证综指涨幅的依次有中邮核心、光大量化核心、博时特许、易方达价值成长、广发小盘成长、富国天瑞、国泰金马稳健、光大新增长等。不过,在这部分四季度末相对高仓位的基金中,也有一些在今年以来的业绩表现不如人意,遗憾错过了今年以来A股的“小牛”行情。其中,四季度仓位达83.73%的上投摩根成长先锋,今年以来的业绩为14.21%,仓位为86.29%的富国天惠业绩为18.42%、仓位在87.35%信达澳银领先增长,其业绩为22.37%。而分析其背后原因,无论从选股还是从选时的操作上,上述业绩不佳的基金从今年以来似乎都没有跟上市场的热点与节奏。行业配置防御为上信达澳银领先增长却是在四季度末时就已经持看空市场的观点。该基金基金经理认为,“国内外经济形势虽有波动但仍有可能进一步恶化,各类经济刺激方案将为股市制造不同的短暂热点,但由于整体估值仍未足够便宜,我们认为未来一段时间内的股市仍难言乐观。”而对于一季度的投资,该基金经理表示“仍将谨慎”。因此在行业配置上,信达澳银同样采取了超配机械仪表以及医药,分别达到了18.41%、7.8%。从四季度的持仓情况来看,上投摩根成长先锋是全力押宝于“4万亿”。上投摩根公司相关人士则对记者表示,公司在整体的策略上就是对于2009年的市场保持较为谨慎的态度。四季报显示,上投摩根成长先锋从四季度开始就逐步增加与“4万亿”投资相关的行业,重仓制造业中的机械仪表以及医药。但在具体的配置上,上投摩根成长先锋则是采取十分集中的持股方式,制造业占比竟高达60.31%。而在四季度末,根据渤海基金的计算,股票型基金虽然在整体是超配制造业,但相关股票占比也仅为38.3434%,超过市场标准配置1.4302个百分点。具体到机械仪表以及医药行业上的配置,四季度末全部基金的平均配置水平为11.52%和6.9103%,均略高于市场标配2个百分点左右;而上投摩根成长先锋在上述行业的配置上却是分别达到了25.12%和13.08%,超出一倍有余。但今年以来,超配机械仪表以及医药也许并没有给上投摩根成长先锋带来多少的超额收益。其中截至3月25日,医药指数今年以来的涨幅仅为22.16%,落后于同期上证指数25.85%的涨幅。不过,对于行业配置结构对于基金的影响,仍有业内人士认为可能并非主要因素。好买网基金研究员庄正对记者表示,他通过分析四季度这些基金的持仓行业和持股状况,即假设基金去年四季度的行业配置状况不变,假设行业配置资产涨幅和行业指数涨幅相当,富国天惠、上投摩根成长先锋、信达澳银领先增长的净值涨幅分别只有14.02%、14.94%、14.84%,而与之相对应的中邮核心优选和富国天瑞的理论净值涨幅分别也只有15.07%、14.20%。因此庄正认为,行业配置可能并不是这些基金表现不佳的主要原因。仓位变脸那么又是什么能够决定“小牛市”中基金排名的起落?业内人士认为,能够跑赢大盘的除了精选个股,可能更重要的策略还是要靠仓位的控制。国都证券基金分析师苏昌景称,股票仓位依然是决定基金净值增长的重要因素。但令人不解的是,虽然从四季度的仓位上,上述“抄底失败”的高仓位基金似乎是已经正要开始的“牛年”做好冲锋的准备。然而从各基金今年净值走势的情况看,它们却恰恰是输在了开头。在一月份上证指数增长9.33%的情况下,其间上投摩根成长、富国天惠、信达澳银领先增长等基金的净值增幅却分别只达到了2.21%、3.87%、3.35%。能够借以分析上述“意外”情况的是,根据渤海证券的仓位观测显示,上投摩根成长先锋、富国天惠和信达澳银领先增长等基金无不是在今年初时出现了仓位骤降的现象。在渤海证券1月9日的观测中,富国天惠的仓位降至60%,上投摩根成长先锋的仓位则是降至70%、信达澳银领先增长也降到了60%。而在此后的整个1月中,上述各基金均是维持在这一仓位水平附近,而这也是它们被那些在四季度末时同为高仓位的基金拉开差距的重要原因。可供比较的是,在一季度,仓位观测数据仍一直维持在八成以上的基金中,如中邮核心优选、光大量化核心、博时特许、易方达价值成长等,其间的净值增幅分别为15.19%11.33%、14.35%、12.69%。显然,有人踏准节奏,也有部分基金经理踏空了行情。对此,上海某基金经理表示,他当时也预计作为春节前的业绩真空期,一月的市场可能相对活跃,但他承认没有想到行情这么好。而他认为,当时减仓也是普遍现象,因为在年末为拼排名而增加的仓位,在当时A股涨幅较高的情况下需要兑现一些浮盈和进行操作上的变化。而这些“垫底”高仓位基金的减仓局面,直到春节过后才得以改观。2月6日的渤海证券仓位观测显示,富国天惠、上投摩根成长先锋、信达澳银领先增长的仓位重新回到了八成以上,分别达到85.94%、82.47%、95%。但在2月17日,沪指越过2400点后再次发生调整,但是富国天惠和上投摩根成长先锋的仓位没有大幅下降,2月20日,上投摩根成长先锋的仓位仍维持在82.70%,富国天惠则为72.28%。 87 | 时尚 组图:长裙上的“开衩” 时髦更多于性感导语:开衩裙能让简约利落的服装线条变得生动活泼起来;双侧选择开缝的开衩裙就更具轻松时尚感了.如果你还嫌不够出众,那么请在衣摆中央进行细细的开缝,让简约造型变得更为清新。简单三招让你变身现代时髦女郎。(图片来源:风尚志)Ralph Lauren说自己爱Art Deco和东方情调(Chinoiserie)主导下的1930年代,以此为灵感的2011秋冬秀场系列果然也赢得了满堂彩,其中穿凫绿色丝缎开衩裙,胸腰封得密不透风只露出一条纤纤长腿的Olga Sherer更让人难以忘怀。继2010年春夏猛烈的开衩裙风暴后,2011春夏的开衩裙有些不疾不徐。相对夺人眼目的色块,Stella McCartney柠檬和香橙印花下的双开缝,Louis Vuitton香艳斑马纹长裙中探出的玉腿,Yves Saint Laurent裹身裙的开衩低调了许多。到了秋冬,它仍未退出流行,会在Prada、Ferragamo、Bottega Veneta、SportMax秀中继续挑逗你的神经。一步探戈的优雅Ralph Lauren所谓的Chinoiserie曾经在法国风行一时,富贵人家的墙纸、壁衣、帷幔、家具上处处是东方瓷器藤蔓花鸟的纹样,但那时的仕女依然身着紧身胸衣和蓬裙。直到100多年前迷恋一千零一夜浪漫华丽的Paul Poiret设计了Hobble裙才有真正意义的开衩裙出现,当时的Hobble裙臀部宽松而脚踝处紧窄,仅在从脚踝到小腿的位置留一个楔形的开口,除了显出脚踝的纤长和暗示性的意味,能让伊人恰好迈出一步探戈的大小,也成为巴黎贵妇迷恋Hobble裙的理由。随后开衩裙的开衩渐渐从脚踝向上蔓延,在1949年Dior曾推出过名为“Trompe Lóeil”的连身裙,裙子分为两层,外面的罩裙开衩一直高至腰部,露出里面的紧身裙,这让人想到2011秋冬Dior秀中Martha Streck所穿的薰衣草色的帝政长裙,也是两层叠穿侧开叉,比昔日“Trompe Lóeil”裙子更为浪漫娇柔。大屏幕上的开衩裙最有名的两件一条属于《Breakfast at Tiffany's》中的Audrey Hepburn,Givenchy出品的小黑裙,开衩到膝盖,造型极简,Hepburn穿着她带着黑色长手套手持细长的水烟袋往那里一站,就是仪态万千。另一条属于《上帝创造女人》中的Brigitte Bardot。她穿着开衩的大摆裙赤脚跳曼波舞的姿态,成为风情万种的象征。蕴含危险的单品被冠以性感盛名的开衩裙很实穿,一条开衩帮助女性前行时不被裙摆牵绊,同时纤纤线条将人的视线向两端延展。她性感的一面不是浪得虚名,无论衩开至何处开在哪里,都会因为腿部的若隐若现让人浮想联翩而带有香艳意味,这种诱惑甚至远超坦然而露的肌肤,于是不少人的印象中,开衩裙不属于少女而属于女人,特别是那些暗含危险气息的神秘女人,比如007系列电影里的蛇蝎美人,她们就会在被开衩裙遮掩的地方带上一只7.65mm口径的Walther PPK手枪。能气定神闲穿出开衩裙的女人未必要超模身材,却一定要强大内心,只有相信自己穿上开衩裙后流露的魅力,才能驾驭好这种蕴含着危险与神秘的单品,典型的例子是Gwyneth Paltrow。但好女孩在成长过程中总是把女人调情撒娇的本能一再克制,如《黑天鹅》中的Nina般处处压抑自我,出落的恭俭温良却失去了自信。从这个角度,鼓励长大成人后的好女孩穿开衩裙至少有两方面的意义,从行动上解放自己,从心灵上解放自己。当然,听了这话也不必马上换一条飘逸的雪纺开衩裙礼服走上街头,Chloé春夏的开叉裙有着清新文艺的态度;Prada秋冬带有60年代的蒙德里安裙品相的连身裙将侧开衩和纽扣融为一体,长方廓形让你依然有种少女情怀,这些开衩裙平易近人的姿态中蕴含着更多流行的可能。TIPS打开身体开衩裙穿得漂不漂亮和步态的相关性大过你的腿有多长,步履优美的女生一定是身材挺拔,行走时膝盖稍有碰触而不两腿散开的。以下三招能帮助你习练出优美的步伐。第一步:打开肩膀,走路轻松有型。用瑜伽中的牛面式打开肩膀:两腿互相交叉坐在地板上,双膝上下一条直线,双脚分别放于异侧臀部旁边,双手在背后相扣,保持背部的挺拔后停留20个呼吸。第二步:腰背挺直,提升整体气质。头脚两头翘很有效:俯卧在垫子上,两只手臂尽量前伸,与两肩平行。抬右臂左腿,手腿绷直,保持5秒再慢慢复位。换另一侧,重复8~10次为一组,做3组即可。第三步:胯部打开,步子也迈得漂亮。仰卧束角式最适宜懒人:端坐在垫子上,两脚相对,两腿弯曲,小腿尽量贴近大腿,慢慢躺下后打开腿,脚掌外侧接触。两手自然在身体两侧,保持3~5分钟。 88 | 房产 燕郊金玉源8号楼下半年开盘主推80平两居(图)新浪房产讯 (编辑 务名杨) 金玉源 (论坛 相册 户型 样板间 地图搜索)8号楼预计今年下半年开盘,主力户型为80平米两居,开盘价待定。目前项目1-7号楼均已售罄。金玉源位于京东潮白河旅游度假区,东至燕顺路西邻潮白河,南至神威北路。距首都机场25公里, 距北京市CBD中心区31公里。小区绿化率高达40%,容积率仅为1.99,以板式小高层住宅为主体,采用现代简约建筑风格,充分考虑居住的舒适性和人文环境建设,依托潮白河美景,因地制宜,在整个小区环境体系建设中以水系贯穿各个组团,以亲水为主线,打造出“水岸理想家”的理想居住方式。在充分体现居住舒适性的基础上,金玉源在户型设计上也精益求精,主要户型均为70-90平米的小两居为主,采用最大化享受采光、采景的设计,增加舒适度,每户视野均深远开阔,营造出理想的居住空间。所有户型均具备大面宽、小进深、高使用率的特点。    以上信息仅供参考,最终以开发商公布为准。    点击查看更多打折优惠楼盘信息 89 | 娱乐 《护宝娇娃》3月公映 看俄罗斯美女搏击(图)新快报讯 (记者 刘嫣)和印度电影一样,俄罗斯电影中最吸引人的部分就是天使面孔和魔鬼身材的性感美女。去年一部俄罗斯电影《密码疑云》就让内地的观众见识了一把俄罗斯美女的好身手,今年3月又将有一部俄罗斯科幻题材的电影《护宝娇娃》在全国上映。既然名为“娇娃”,同样的,片中也不乏身材火爆的美女主角。女主角是考古学者同时也是搏击高手寻宝电影一向喜欢大打美女牌,片中的女主角不仅要样貌出众、身材火辣,而且必须拥有渊博的学识和灵活的身手。《木乃伊》系列中的女主角以及《盗墓罗拉》就堪称范本。而《护宝娇娃》中的阿列娜就是一个女考古学家和古文字学者,同时也是搏击高手。在影片中,阿列娜受雇于一个神秘的组织,对于一个遗迹进行挖掘和文字破译,没想到在工作完成之后该组织竟然要将阿列娜灭口。机警并身手不凡的阿列娜虽然逃过了毒手,但是神秘组织对她的追杀并没有结束,而且她发现该组织的考古发掘目的并不单纯,和传说中能够统治世界的史前文明有关,于是阿列娜在朋友们的帮助下开始利用自己的优势进行反击……由于要与一支彪悍的国际雇佣军对决,使得影片充满了不少看点。特技效果动作场面火爆媲美《007》影片是根据欧洲年度畅销奇幻小说《七个史前文明》改编而成,由俄罗斯最大的电影公司帕拉米尔电影有限责任公司耗资数千万美元在全世界取景拍摄,在俄罗斯上映时刷新了年度票房纪录。该片不但特技效果宏大,而且动作场面十分火爆,制作水准可以和《007》系列电影媲美。特别是耗资数千万美元真实再现的史前时代伟大文明,令观众震撼不已。除了特效外,影片还在在全球多个著名城市上演的火爆动作场面。为了完成一场城市巷战的动作大场面,导演在中东某重要城市中调集了上千名军警参加演出,更从当地政府手中借调了数架直升机和装甲车参与拍摄,这一大动作一度造成当地居民的恐慌和骚乱。 90 | 家居 涂料业在压力下寻找新出路:民族品牌PK洋品牌国内涂料业逐渐形成了长三角、珠三角、环渤海等几大主要的研发生产基地,并诞生出了一批具备相当实力和知名度的民族涂料品牌。事实上,就涂料技术而言,中外品牌的差距并不是很明显,最主要的差别在于品牌认可度和渠道的覆盖、终端掌控与影响力渗透三方面。随着经济刺激计划的逐步拉开,国内市场对涂料的需求增大,民族涂料品牌欲“揭竿起义”,抢占更多的市场份额。民族涂料品牌集体出击拓展市场 从今年来看,一些企业的举动也是相当显著的,美涂士聘请明星代言人,不断加大品牌推广与渠道布局的投入;三棵树漆推出“亿元让利招商大行动”则提出了激活县域经济,对以往的渠道建设措施进行了局部升级;嘉宝莉在儿童漆领域的专注,同时又领先行业推出了网络商城,这些在品牌、渠道、终端等环节的创新,无不表明民族涂料品牌确实已经迈开了大步伐。第三季度民族涂料集团军攻势不减 2009年过半,这股集体出击的攻势并未减弱,并呈现出更多的亮点,紫荆花漆新LOGO正式亮相后,加快了市场拓展的力度,从7月20日起其电视广告将在CCTV-1、CCTV-2、CCTV-3、CCTV-8等各频道的不同节目中出现;中华制漆则与陶氏涂料展开业务技术合作,引进其“快克驰”水性道路标线漆技术,在技术上寻求更大的突破;为提升品牌形象,嘉丽士不惜重金成功签约影后李冰冰,旨在抢占涂料行业制高点。从这一系列动作,我们不难看出,民族品牌已经越来越多地吸引着我们的视线,他们加大了市场拓展、产品开发上的力度。 近段时间,不少涂料企业纷纷给出第二季度财报,广东美涂士化工成功地获得集团公司业绩增长冠军;嘉丽士店面+会员俱乐部+服务=嘉丽士CCS营销模式,让嘉丽士逆市飞跃增长,连续两个季度完成满意目标;中华制漆仅2009年上半年,公司产值比2008年同期增长50%;北京、上海、武汉、徐州、韶关的生产基地相继建成投产。这些骄人的数字,显示了民族涂料企业在危机中逆势崛起的信心。 91 | 体育 最后一线生机!绿军2次1-3翻盘 4.2%能创第9奇迹吗新浪体育讯北京时间5月10日,热火客场加时以98-90力取凯尔特人,大比分以3-1领先,取得赛点。在大多数人看来,丢掉了这场比赛,凯尔特人在总比分1-3落后的情况下已经翻盘机会渺茫了。因为在NBA的漫长历史中,没有几只球队能够完成这样的奇迹。翻开NBA数十载的漫长历史,在7场4胜制的季后赛系列赛厮杀当中,总共有过190轮系列赛出现过球队以3-1领先的情况,但是这么多轮系列赛当中总共就只有8次能够成功实现逆转的。也就是说在这种情况下,凯尔特人的翻盘概率仅为4.2%,这当然是一个极为触目惊心的数据。不过也许对于绿衫军的球迷来说,他们没有什么不可能完成的任务,因为“顽强”二字早就注入了这支球队的血脉,不到最后一刻,没有任何一个人会有放弃的想法。这样的说法当然是有所依据的。在这8/190中,8次神奇大逆转中有两次都是这支顽强的凯尔特人所创造的。历史上一共有7支球队曾经完成过这样的逆转壮举,而凯尔特人也是唯一一支两次完成这一壮举的球队。所以对于他们来说,机会并不算非常渺茫。时间仿佛一下把凯尔特人的球迷带回了那段令人振奋的时光。那两次逆转,分别发生在1969年和1981年。1968年,凯尔特人在一度1-3落后的情况下最终实现了翻盘。虽然那个年代NBA人才辈出,但那注定是属于凯尔特人的一个时代。这已是60年代凯尔特人王朝的尾巴了,拉塞尔和张伯伦的“巅峰对决”在这一年持续上演。东部决赛中,拉塞尔率领的凯尔特人在1-3落后的情况下上演奇迹,拉塞尔在第七场比赛最后60秒投中关键罚球,并且封盖了76人的关键投篮,最终帮助凯尔特人以100-96扭转乾坤。而这也是NBA历史上第一次在7战4胜制的系列赛中有球队在1-3落后的情况下成功逆转。创造历史的正是凯尔特人。1981年,同样是东部决赛,对手同样是76人,历史仿佛故意重演了一次。这次的大决战,凯尔特人出师不利,面对“J博士”欧文和鲍比-琼斯等人率领的76人,他们很快便以1-3落后,不过二年级生“大鸟”拉里-伯德天生就是球场上的王者,在他的带领下,凯尔特人在第五场和第六场均以2分险胜,连丢两场的76人此时仿佛陷入了历史的魔咒,有些慌了手脚。第七场决战,拉里-伯德成为凯尔特人的救世主,他在终场前用一记绝杀帮凯尔特人以91-90挺进了决赛。总决赛当中,他们一鼓作气击败摩西-马龙率领的火箭赢得当年的总冠军。尽管这两次奇迹的书写距离现在已经遥远,但这支球队留下的顽强精神却始终没有改变,在加内特、雷-阿伦、皮尔斯这些战士身上,我们早就看到了这股永不服输的气息。虽然面前的这支热火拥有联盟最豪华的三巨头,虽然在热火的历史上他们从未在3-1领先的情况下被对手逆转成功,但不到比赛最后一刻,谁也不能把逆转奇迹的可能说成没有。而热火队史上3-1领先时从未被逆转过,反而他们曾在1997年东部半决赛1-3落后尼克斯的情况下实现过4-3翻盘。历史记录方面,热火没有劣势。绿衫军要想创造奇迹确实很有难度,因为他们必须赢得接下来的2客1主全部比赛。附历史上8次1-3落后情况下的逆转:1、2006年,太阳(第二)4-3湖人(第七);2、2003年,活塞(第三)4-3(第六)魔术;3、1997年,热火(第二)4-3(第三);4、1995年,火箭(第六)4-3(第三)太阳;5、1981年,凯尔特人(第一)4-3(第二)76人;6、1979年,子弹(第一)4-3(第二)马刺;7、1970年,湖人(第二)4-3(第四)太阳;8、1968年,凯尔特人(第二)4-3(第一)76人;(贾磊) 92 | 时尚 组图:街拍超模Freja 摇滚风时髦又大气导语:眼看各种以硬朗风格为主的单品成为今年炙手可热的卖点,具有摇滚风格的皮衣、T恤、机车靴才是你“转型”或者“延续”中性风格最犀利的关键!Go High,Go Rogue 型格碰撞:垫肩西装堪称 完美 廓型的点睛之作,搭配朋克感暗闪上衣和烟灰色窄脚裤,碰撞精彩。我们似乎在DUMBO截住了正往录音室排练的摇滚乐手Freja…Chic in Loose 浪漫松散:翅膀在抽象绘画的真丝tank上拍动,和皮夹克一起隐约显露rock chic,不严谨的宽松轮廓诉说着漫不经心的时装腔调。Rebel!叛逆感:军绿色连身裤的力量称霸春夏,野战感觉的设计在2011年异常走俏,摇滚的廓型皮夹克表现反叛精神,配搭Ann Demeulemeester的野战靴更是出彩。High street patch 拼接当道:经典牛仔裤拥有不羁精神,而全新拼接系列的牛仔装则成为各设计师T台上把玩的新宠。前后拼接的牛仔针织裤为街头装扮赋予了饶有意味的个性艺术感。Rock on!继续摇滚:叼着香烟的Freja的确最帅气。垫肩拼接修身牛仔外套是打造潇洒廓型的最佳单品!配搭紧身裤和皮靴在清晨上街,仿佛对昨夜的摇滚余兴未尽…… 93 | 体育 湖人官方最佳在场时输18分 12中3还敢和禅师叫板!新浪体育讯首场比赛10投5中拿到15分12篮板,打出这个数据的拉玛尔-奥多姆也算对得起自己年度最佳第六人的身份,湖人输球,也不能苛责他。不过,第二场,12投3中,只得到6分9篮板,罚球和三分球都没有命中,湖人81-93输球,奥多姆就难逃其咎了。其实,完全将黑锅扣在奥多姆身上也不合理,至少,他第二节还有那么几球打的不错。第二节还剩不到9分钟的时候,菲尔-杰克逊换上了常见的第二套阵容,让奥多姆带着马特-巴恩斯和香农-布朗等人上场周旋。在这套阵容中,奥多姆是绝对的老大。剩7分52秒的时候,奥多姆从中线左侧开始发起进攻,几个大步就跨入了小牛禁区,然后面对德克-诺维茨基和布兰登-海伍德的双人包夹防守,强行上篮拿到2分。这一球,奥多姆打的非常聪明,瞅准了小牛还没及时落位,就一鼓作气杀进内线,还造成对手犯规。所以,进球后的奥多姆非常兴奋,和队友一个个地击掌庆祝。客观地说,奥多姆这个漂亮的进球得感谢菲尔-杰克逊。正是禅师在前一次暂停的时候,和奥多姆进行过沟通,不过当时奥多姆并不服气,从现场镜头上来看,奥多姆还有点情绪激动。但杰克逊当时并未和奥多姆过多纠缠,助教也立刻过来拉走了奥多姆。反倒是奥多姆,在助教干预之后仍然继续对着观众抱怨,搞的观众都有点不知所措。最终,虽然对禅师可能是有不满,但奥多姆也是做出了改变,才让球迷看到了那个精彩的上篮。只可惜的是,这一球,就是奥多姆今晚的唯一亮点了。还剩7分多钟的时候,他被科比-布莱恩特替换下场,似乎也就带走了所有手感。就像是一个草台班子演奏交响乐一般,高潮来的太早,之后就戛然无声了。奥多姆的表现,正是如此。上半场快结束的时候,奥多姆再度得到机会上场,面对肖恩-马里昂的突破,拥有身高优势的奥多姆却只是高举双手站在篮下,平添一次犯规。这一球,主要是德克-诺维茨基分球的功劳,传的很隐蔽,不过奥多姆既然已经迎上前,干脆就犯规彻底一些。但奥多姆似乎却表现地和一个初学者一样,白白让对手拿到3分。奥多姆今天虽然打的很烂,但运气也算不错了。虽然第四节他上场之后,除了一个勾手拿到2分之外,就是无穷无尽的投篮不中和失误,但因为有个打的更烂的加索尔在身边,所以看上去奥多姆也还行。要不是有加索尔,估计今天第三节被主场球迷嘘的就应该是奥多姆了。拿到年度最佳第六人,这是说明了奥多姆有实力,身手的确够全面。不过,奥多姆一直以来的问题就是不够稳定,容易走神。而这场比赛,正是奥多姆在自曝软肋。无论是进攻还是防守,他似乎都没有全神贯注。和对面那个9投4中的替补巴里亚相比,奥多姆这个最佳第六人,今天有点对不住人。(XWT185) 94 | 体育 战绿军韦德才是制胜因素 闪电侠:我的角色得改变 新浪体育讯北京时间5月1日(迈阿密时间4月30日)消息  凯尔特人主帅道格-里弗斯说,与热火的这轮系列赛,对手的X因素是克里斯-波什,主要理由是,勒布朗-詹姆斯和德维恩-韦德的表现基本可以预计,但他无法预计龙王的表现。真的是这样么?那如果说波什是热火的X因素,那谁是制胜因素呢?答案很可能是:韦德,就是那个常规赛表现不佳的闪电侠。请别急着骂人,先耐心看完下面的分析。防守黑洞>>都是坏习惯惹的祸常规赛与凯尔特人四次交手,韦德场均仅能贡献12.8分和3.8个篮板,投篮命中率也仅为28%,而且他的失误次数和助攻数一样多(各21次)。为什么闪电侠的表现会这么烂?让我们来看看四场交锋中的一些镜头。第一场开局,热火6比9落后,韦德一直在做他最擅长做的事情——攻击篮筐,他在罚球线左翼接球,面对雷-阿伦的防守背身挤到篮下。韦德沉下右肩,准备出手之后再造对手犯规,结果球偏离篮筐,他倒在了地上。韦德爬起来高举双手向裁判申诉,与此同时,凯尔特人下快攻,隆多指挥队友跑好位之后传到空切的阿伦手中,后者上篮得手,此时闪电侠在哪?刚过半场。时间快进,来到第二次交锋的第二节,韦德依然做着他最擅长做的事情,突破到篮下攻击篮筐,这次他没有背身,而是准备正面突破之后直接上篮,在加内特和阿伦的协防下,投出的球完全没有准星。加内特抢下篮板后第一时间交给隆多,韦德开始和裁判交涉,与此同时,阿伦早已快下并埋伏在三分线外,隆多球一到,三分中的。此时闪电侠在哪?离阿伦八丈远。那场比赛下半场的开场几分钟还有类似画面,韦德强突篮下欲完成上篮,奥尼尔逮个正着送出火锅,跟前面提到的那次一样,阿伦迅速快下,又是等隆多一把球送到,三分中的。此时闪电侠在哪?都没过半场,他找裁判理论去了。这种场面在双方的第二次交手中一共出现了四次,雷-阿伦全场35分中有10分的得分来自于此——韦德强攻不成不及时回防,绿军抢到篮板打反击得分。毫无疑问,韦德是联盟最好的篮筐攻击者之一,但只要他上篮失手而裁判没有鸣哨时,他总会习惯性倒在地上,或者去找裁判理论,有时两者皆有。凯尔特人抓住了热火这一漏洞,并制定了很好的应对策略:在韦德倒下的情况下派阿伦迅速快下,打对手立足未稳。把对手的强项变为弱项,这就是凯尔特人的厉害之处。角色调整>>减少篮下强攻、加强进攻组织众所周知,雷-阿伦确实也是一个比较难以防守的球员,因为他的跑动和借助队友挡拆的能力联盟可能都无人出其右,不管谁去防他,都得累得掉层皮。韦德显然也意识到这个问题了,在双方的第四战前,他承认,比赛中防守阿伦是个苦力活。“他真正厉害的地方是在攻防转换中杀伤对手,”韦德说,“很多时候他都会参与快速反击,他迅速跑到自己熟悉的位置,然后接球完成投篮。所以我作为一个篮下攻击者,使得他能够在我攻击不成的时候迅速快下,而我必须额外卖力去防他,这就是他这么难防的原因所在。”热火之前并不是完全没有意识到这一点。根据Hoopdata.com的数据,韦德本赛季攻击篮筐的平均出手次数为7.2次,因此每场能获得8.6次罚球机会,而对上绿军,他这两项数据都下降到了5.5和5.8次。很显然,这还不够。热火主帅埃里克-斯波尔斯特拉在这两天的训练后均表示,球队希望韦德能够变成一个稍微不同的球员,那就是多参与一些进攻发起者的工作,而不是一味攻击篮下。“(与凯尔特人的)上一场交锋,德维恩就已经打出更成熟的表现,”斯帅说,“我们上一场做了调整,让他不要急于给对手内线施压,而是多给队友创造机会。这样一来,我们在让他保持侵略性的同时发觉了其他得分机会。他不需要每一场都得25分。这是我们在这轮系列赛中必须要找到的平衡。”韦德现在非常接受这个新角色,尽管他上赛季在与绿军的季后赛中场均砍下33.2分。“我的角色已经完全不同了,”韦德说,“我就是想做到那些能让我成为最好的事情,我认为我上一场(与绿军的常规赛第四战)打得好多了,虽然我的得分依然不高,但我可以做其他事情。对我来说,最重要的事情就是做好防守,抢篮板,以及其他一些事情。”常规赛与绿军的最后一次交锋,韦德得分(14分)依然不高,但助攻(8次)和篮板(5个)都创造了本赛季对绿军的最高值。很多韦德球迷或许还不能接受这一点,一个全联盟最犀利的篮下攻击者要转化身份,变为进攻组织者?但现实就这么残酷,凯尔特人几乎用完美的方式把韦德的这一强项变为弱项,热火不得不调整。NBA传奇教练、前灰熊主帅胡比-布朗在常规赛末段接受新浪体育的专访时就提出过这个观点,他认为应该多用韦德,而不是詹姆斯,去客串控卫,玄机就在于此。至于这个调整会不会取得理想效果,还有待接下来的比赛去检验。(新浪体育 黎双富 发自迈阿密) 95 | 教育 黑龙江399名考生英语四六级考试作弊受处理新华社哈尔滨6月23日电(记者 曹霁阳 梁书斌)黑龙江省399名在全国大学英语四六级考试中违纪作弊的考生受到处理。这是记者昨天从黑龙江省招生考试委员会办公室了解到的。2010年上半年全国大学英语四六级考试于6月19日举行,黑龙江省有近32万名考生参加了这次考试。经招考部门调查复核,黑龙江省共查处违纪作弊考生399人,考试管理机构已按有关规定全部取消其本次考试成绩。这些考生所在的高校均已按照高校学生管理等规定,对这些学生给予相应处分,并在校内张榜公布。其中,14人被开除学籍、8人被开除学籍试读一年、留校察看的有161人、有216人被记过。据了解,这些考生的违纪作弊行为多种多样,有的是替考,有的是打小抄、传纸条、偷窥他人试卷,有些则利用通讯工具作弊。 96 | 科技 多功能播放器 苹果iPod touch仅售1330元    作者:曹锐    与上一代iPod touch相比,新一代touch 3加入了语音控制与语音录制功能,同时处理速度更快。该机集无线上网、音乐、视频播放等多种功能与一身,是目前市场上最具可玩性的随身数码产品。今天该机的市场报价为8GB/32GB/64GB 1330元/1999元/2590元。咨询电话:15810888951。    苹果 iPod touch 3    容量:8GB/32GB/64GB 报价:1330元/1999元/2590元    编辑点评:苹果 iPod touch 3采用了3.5英寸显示屏,分辨率为480×320像素,可支持多种音视频格式。除此之外苹果iPod touch还具有Wifi无线上网功能,支持空间立体操作,通过摆动机身可操控特定游戏。    比起上一代产品,iPod touch 3并没有搭载摄像头,但内部升级到类iPhone(手机上网) 3GS的硬件配置,速度提升50%,支持OpenGL ES 2.0(OpenGL ES 2.0支持很重要,因为可以玩更细致更逼真的游戏,3D执行效果会较佳。),附带内置麦克风线控耳塞,增加声控功能支持。        苹果 iPod touch 3    [参考报价] 8GB/32GB/64GB 1330元/1999元/2590元    [商家电话] 15810888951 97 | 体育 天神下凡130s白热10分 皇帝最痛快绝杀晋升超巨星新浪体育讯热火还有一场比赛就能进入东部决赛,而且这场比赛是在热火的主场进行,而我们都知道热火主场球迷全体身着白衣,惟妙惟肖地营造出一副灵堂般的氛围。在这样的氛围中,如果能将凯尔特人送回波士顿去钓鱼,这该是多么惬意的感觉。但是在赛前,热火三巨头的观点却不尽一致,德维恩-韦德和克里斯-波什都认为“这场比赛将非常艰苦”,詹姆斯没有提比赛艰苦不艰苦,只是表示“我们仨组成三巨头,就是模仿凯队三巨头来的”,颇有点“师夷长技以制夷”的得意劲儿,但是要真的谈到“制夷”,皇帝还需要一场胜利——与胜利的酣畅抑或丑陋无关,只要胜利便可。詹姆斯当然不会让韦德一人扛着球队太久。下半场刚开始,热火的第一个球便是由皇帝高位跳投入筐,终于帮助球队第一次追平了比分。其后热火队又让凯尔特人队连得5分,此时又是詹姆斯挺身而出,果断三分出手命中,再度咬住比分。在雷-阿伦达成神奇3+1之后,皇帝果断突破分球到底角,埋伏在这个位置的迈克-毕比三分中的,这一助攻还是帮助球队将分差控制在3分。而后皮尔斯单打詹姆斯后手软抛投不进,但是转过头来,詹姆斯用同样的方式单打皮尔斯,也是一手抛投,球却空心入筐,于此同时,詹姆斯还兼带将皮尔斯撞出场外以示皇威。而到了第三节还剩下2分51秒时,阿伦再度三分线外发炮命中,将比分再度反超2分,此时詹姆斯选择自己来回应阿伦,果断命中三分。其后双方互有往来,到比赛还剩2秒时,凯尔特人依然以73-71手握2分领先优势,此时凯队由德隆特-韦斯特控球突破。韦斯特一路杀奔篮下正欲上个空篮时感觉有些许不妥,抬头定睛一看,空中正有一员白衣白箍黑面老脸男子横亘,而且最重要的是,来者背号单单念一个6字!韦斯特心中暗叫一声不好,但是箭在弦上不得不发,他只得苦涩的吞下一击火锅,来自詹姆斯的火锅。而到了生死攸关的第四节,韦斯特上来便回应了上一节的被帽,果断中投命中将分差拉开到4分,詹姆斯则用两罚一中告诉韦斯特你且慢走。但是在后面的比赛中,凯尔特人的角色球员开始发威,在比赛还剩下3分43秒时,他们反而以87-82取得了5分的领先优势。此时詹姆斯依然非常冷静,他传球给埋伏在右侧三分线外的詹姆斯-琼斯,后者三分命中,将比分追至只差2分。而当比赛进入最后三分钟,波什晃开凯文-加内特扣篮得手将比分追平时,皇帝认为,一切都该结束了!接下来,将是天神下凡的表演——詹姆斯先是面对皮尔斯的防守果断命中三分,将比分反超,而在绿军一番进攻不中后,又是詹姆斯在三分线外再度发炮,三分命中后热火的领先优势已经达到了6分,此时比赛时间还剩下40秒钟。直播的镜头给到皇帝脸上,他的嘴微微的张着,胸膛微微的浮动着,目不转瞬地盯着前方。前方究竟有什么?是过去两年的季后赛悲剧般地折戟沉沙?是过去一个夏天的忍辱负重般地背负骂名?还是“婊子一样的轮回”?对此,我们不得而知,我们唯一能够知道的,是当詹姆斯命中这一个三分之后,镜头还给了坐在场下的三分神射手阿伦,后者一脸落寞,其实,落寞的何止阿伦一人,整个凯尔特人都已经彻底崩溃!皇帝彻底接管了这场比赛,他用抢断快攻暴扣化解了凯尔特人最后的反扑,然后又一次轻描淡写的上篮。这短短的130秒钟时间内,詹姆斯一人打了凯尔特人一波10-0!最终皇帝几乎打满全场,20投11中,三分球7投5中,得到33分7篮板4助攻1盖帽,帮助热火在主场以97-87战胜凯尔特人。比赛结束了,热火与凯尔特人的系列赛结束了!皇帝半跪在球场中间,将头深埋,双肩微微耸动,他不想让人看到——他一直都不想让人看到的,除了泪水,还有很多很多,懂的人,自然懂,不懂的人,永远都不会懂!而在散场时,詹姆斯最后一个拥抱的凯尔特人球员是韦斯特,所以到今天为止,人们应该明白,这样的拥抱,意味着所有那些不堪入耳的流言蜚语是多么的可笑。最后,詹姆斯将躺在地上痛哭的韦德拉了起来,抱入了自己的怀中。没有什么比手刃上赛季将自己淘汰出季后赛的敌人更为过瘾的事情了,没有什么比手刃将自己一路推向“叛徒”名声的对手更为爽快的事情了!还有那投不进绝杀就不是巨星的紧箍咒,都滚开吧。此时的皇帝,只想对凯尔特人说一句话,那便是——安心上路!而漫漫长夜真如铁,皇帝应该感谢的,除了自己的兄弟们,除了油头帕特-莱利,还有那些曾经轻视过他的人!下一站,东部决赛,皇帝来了!超级巨星?詹姆斯当之无愧。[新浪NBA官方微博] [热火新闻动态微博] [技术统计] [直播实录] [高清组图](三儿) 98 | 游戏 iPhone网游《契约OL》全球遭遇尴尬由中国公司WiSTONE 推出的iPhone 平台首个大型MMO网游《契约OL》上线两个多月以来,迅速登上iPhone APPSTORE全球排行角色扮演类的第六名。本次推出的版本不仅有中文版本,还有英文及俄文版本。令人郁闷的事,随之而来的,并不是开发公司像其他iPhone热销游戏那样赚得盆满钵满,而是让开发公司有苦难言,入不敷出。这一切归结于两个字“坏账”。APPSTORE是依靠APPSTORE的帐号进行付费的,若玩家想申请一个APPSOTRE的帐号,只需提供信用卡信息即可在APPSTORE上购买软件产品。目前国内的iPhone玩家中开始大量流行黑卡,所谓黑卡就是假的信用卡帐号,甚至盗用其他人信用卡帐号注册的APPSTORE帐号。玩家通过这样的帐号向APPSTORE进行支付,以获得软件使用权。《契约OL》上线几个月来便深受黑卡其害,上线第一个月看到雪片而来的订单兴奋劲头尚未过去,紧接着一个月就通知其中大量的订单均为坏账,APPLE不能支付,也并不承担此坏账。更让开发商WiSTONE感到无奈的是,在自中国本土玩家的坏账高达90%以上!根据WiSTONE介绍说,公司与国内的很多玩家交流过,玩家之所以使用黑卡一方面是由于费用问题导致,但更主要的原因是他们没有信用卡无法拥有APPSTORE帐户。有关网游支付问题,在国内是相当成熟的。其实在国内完全可以使用点卡等模式进行支付,也没有坏账风险,但这一举措无疑是甩开了APPLE的支付平台,APPLE在这个问题上恐怕难以变通。但据开发商WiSTONE的说法,如果对这个问题不能有效的解决,在后面一旦实施道具收费,恶果不敢想象。一定会出现玩家使用黑卡购买极品道具转卖帐号或者转卖道具本身恶意获利及诈骗。目前看来,在iPhone上推行网游收费依然任重道远,只能依赖APPLE的进一步改善。 99 | 时政 十一届全国人大常委会第十次会议24日起举行中新社北京八月十七日电(记者周兆军)全国人大常委会委员长吴邦国十七日上午在人民大会堂主持召开全国人大常委会第二十八次委员长会议,决定十一届全国人大常委会第十次会议八月二十四日至二十七日在北京举行,将继续审议行政强制法草案等。委员长会议建议,十一届全国人大常委会第十次会议继续审议人民武装警察法草案、全国人大常委会关于修改部分法律的决定草案、行政强制法草案,首次审议可再生能源法修正案草案。委员长会议建议本次常委会会议的议程还有:审议国务院关于今年以来国民经济和社会发展计划执行情况的报告,关于转变发展方式、调整经济结构情况的报告,关于应对气候变化工作情况的报告;审议全国人大常委会关于积极应对气候变化的决议草案、全国人大常委会执法检查组关于检查畜牧法实施情况的报告、全国人大常委会代表资格审查委员会关于个别代表的代表资格的报告;审议有关任免案等。(完) 100 | 时尚 组图:欧美乐坛巨星着装插画 搭配不枯燥导语:音乐一直都和时尚是密不可分的,最近美国插画艺术家Moxy也发表了Ensemble系列作品,以最具个人色彩及特色的穿着服装来诠释音乐流行史上一些指标性的人物。他选择了世界上最知名的20位男性音乐人的经典衣着造型装扮作为设计元素,比如迈克尔杰克逊、猫王、科特-柯本等。让我们一起回顾一下历年来的这些乐坛巨星穿衣风格吧。全身黑色系是他的基本着装,当时的黑色西装与白色衬衫的搭配直到现在也是不变的经典套装。一个乐队当然少不了鼓手,而机车夹克是当时最时髦的朋克装,这种时髦如今演变成男女都爱的炙热单品。不受束缚,放荡不羁的性格写照,复古的宽檐帽、黑框眼镜、嬉皮的夹克、一根粗粗的金色项链看起来十分痞气。堪称最潮的音乐人,不过他的穿衣搭配一般以休闲为主,迷彩裤和彩色球鞋基本是他每天必备单品。他喜欢混搭的感觉,怎么舒服怎么穿,不过一顶彩色针织帽更是他的标志着装。开始选择一些夸张的着装风格,袖口像喇叭那么大,厚履些就在这个时候被大家所认知。Jimi Hendrix喜欢英伦风的西装,一把吉他和宽檐帽寸不不离。今天这款西装已成功演变成拿破仑装,同事可以成功的驾驭在女人身上。 101 | -------------------------------------------------------------------------------- /modeling.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | # Copyright 2018 The Google AI Language Team Authors. 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | """The main BERT model and related functions.""" 16 | 17 | from __future__ import absolute_import 18 | from __future__ import division 19 | from __future__ import print_function 20 | 21 | import collections 22 | import copy 23 | import json 24 | import math 25 | import re 26 | import numpy as np 27 | import six 28 | import tensorflow as tf 29 | 30 | 31 | class BertConfig(object): 32 | """Configuration for `BertModel`.""" 33 | 34 | def __init__(self, 35 | vocab_size, 36 | hidden_size=768, 37 | num_hidden_layers=12, 38 | num_attention_heads=12, 39 | intermediate_size=3072, 40 | hidden_act="gelu", 41 | hidden_dropout_prob=0.1, 42 | attention_probs_dropout_prob=0.1, 43 | max_position_embeddings=512, 44 | type_vocab_size=16, 45 | initializer_range=0.02): 46 | """Constructs BertConfig. 47 | 48 | Args: 49 | vocab_size: Vocabulary size of `inputs_ids` in `BertModel`. 50 | hidden_size: Size of the encoder layers and the pooler layer. 51 | num_hidden_layers: Number of hidden layers in the Transformer encoder. 52 | num_attention_heads: Number of attention heads for each attention layer in 53 | the Transformer encoder. 54 | intermediate_size: The size of the "intermediate" (i.e., feed-forward) 55 | layer in the Transformer encoder. 56 | hidden_act: The non-linear activation function (function or string) in the 57 | encoder and pooler. 58 | hidden_dropout_prob: The dropout probability for all fully connected 59 | layers in the embeddings, encoder, and pooler. 60 | attention_probs_dropout_prob: The dropout ratio for the attention 61 | probabilities. 62 | max_position_embeddings: The maximum sequence length that this model might 63 | ever be used with. Typically set this to something large just in case 64 | (e.g., 512 or 1024 or 2048). 65 | type_vocab_size: The vocabulary size of the `token_type_ids` passed into 66 | `BertModel`. 67 | initializer_range: The stdev of the truncated_normal_initializer for 68 | initializing all weight matrices. 69 | """ 70 | self.vocab_size = vocab_size 71 | self.hidden_size = hidden_size 72 | self.num_hidden_layers = num_hidden_layers 73 | self.num_attention_heads = num_attention_heads 74 | self.hidden_act = hidden_act 75 | self.intermediate_size = intermediate_size 76 | self.hidden_dropout_prob = hidden_dropout_prob 77 | self.attention_probs_dropout_prob = attention_probs_dropout_prob 78 | self.max_position_embeddings = max_position_embeddings 79 | self.type_vocab_size = type_vocab_size 80 | self.initializer_range = initializer_range 81 | 82 | @classmethod 83 | def from_dict(cls, json_object): 84 | """Constructs a `BertConfig` from a Python dictionary of parameters.""" 85 | config = BertConfig(vocab_size=None) 86 | for (key, value) in six.iteritems(json_object): 87 | config.__dict__[key] = value 88 | return config 89 | 90 | @classmethod 91 | def from_json_file(cls, json_file): 92 | """Constructs a `BertConfig` from a json file of parameters.""" 93 | with tf.gfile.GFile(json_file, "r") as reader: 94 | text = reader.read() 95 | return cls.from_dict(json.loads(text)) 96 | 97 | def to_dict(self): 98 | """Serializes this instance to a Python dictionary.""" 99 | output = copy.deepcopy(self.__dict__) 100 | return output 101 | 102 | def to_json_string(self): 103 | """Serializes this instance to a JSON string.""" 104 | return json.dumps(self.to_dict(), indent=2, sort_keys=True) + "\n" 105 | 106 | 107 | class BertModel(object): 108 | """BERT model ("Bidirectional Encoder Representations from Transformers"). 109 | 110 | Example usage: 111 | 112 | ```python 113 | # Already been converted into WordPiece token ids 114 | input_ids = tf.constant([[31, 51, 99], [15, 5, 0]]) 115 | input_mask = tf.constant([[1, 1, 1], [1, 1, 0]]) 116 | token_type_ids = tf.constant([[0, 0, 1], [0, 2, 0]]) 117 | 118 | config = modeling.BertConfig(vocab_size=32000, hidden_size=512, 119 | num_hidden_layers=8, num_attention_heads=6, intermediate_size=1024) 120 | 121 | model = modeling.BertModel(config=config, is_training=True, 122 | input_ids=input_ids, input_mask=input_mask, token_type_ids=token_type_ids) 123 | 124 | label_embeddings = tf.get_variable(...) 125 | pooled_output = model.get_pooled_output() 126 | logits = tf.matmul(pooled_output, label_embeddings) 127 | ... 128 | ``` 129 | """ 130 | 131 | def __init__(self, 132 | config, 133 | is_training, 134 | input_ids, 135 | input_mask=None, 136 | token_type_ids=None, 137 | use_one_hot_embeddings=False, 138 | scope=None): 139 | """Constructor for BertModel. 140 | 141 | Args: 142 | config: `BertConfig` instance. 143 | is_training: bool. true for training model, false for eval model. Controls 144 | whether dropout will be applied. 145 | input_ids: int32 Tensor of shape [batch_size, seq_length]. 146 | input_mask: (optional) int32 Tensor of shape [batch_size, seq_length]. 147 | token_type_ids: (optional) int32 Tensor of shape [batch_size, seq_length]. 148 | use_one_hot_embeddings: (optional) bool. Whether to use one-hot word 149 | embeddings or tf.embedding_lookup() for the word embeddings. 150 | scope: (optional) variable scope. Defaults to "bert". 151 | 152 | Raises: 153 | ValueError: The config is invalid or one of the input tensor shapes 154 | is invalid. 155 | """ 156 | config = copy.deepcopy(config) 157 | if not is_training: 158 | config.hidden_dropout_prob = 0.0 159 | config.attention_probs_dropout_prob = 0.0 160 | 161 | input_shape = get_shape_list(input_ids, expected_rank=2) 162 | batch_size = input_shape[0] 163 | seq_length = input_shape[1] 164 | 165 | if input_mask is None: 166 | input_mask = tf.ones(shape=[batch_size, seq_length], dtype=tf.int32) 167 | 168 | if token_type_ids is None: 169 | token_type_ids = tf.zeros(shape=[batch_size, seq_length], dtype=tf.int32) 170 | 171 | with tf.variable_scope(scope, default_name="bert"): 172 | with tf.variable_scope("embeddings"): 173 | # Perform embedding lookup on the word ids. 174 | (self.embedding_output, self.embedding_table) = embedding_lookup( 175 | input_ids=input_ids, 176 | vocab_size=config.vocab_size, 177 | embedding_size=config.hidden_size, 178 | initializer_range=config.initializer_range, 179 | word_embedding_name="word_embeddings", 180 | use_one_hot_embeddings=use_one_hot_embeddings) 181 | 182 | # Add positional embeddings and token type embeddings, then layer 183 | # normalize and perform dropout. 184 | self.embedding_output = embedding_postprocessor( 185 | input_tensor=self.embedding_output, 186 | use_token_type=True, 187 | token_type_ids=token_type_ids, 188 | token_type_vocab_size=config.type_vocab_size, 189 | token_type_embedding_name="token_type_embeddings", 190 | use_position_embeddings=True, 191 | position_embedding_name="position_embeddings", 192 | initializer_range=config.initializer_range, 193 | max_position_embeddings=config.max_position_embeddings, 194 | dropout_prob=config.hidden_dropout_prob) 195 | 196 | with tf.variable_scope("encoder"): 197 | # This converts a 2D mask of shape [batch_size, seq_length] to a 3D 198 | # mask of shape [batch_size, seq_length, seq_length] which is used 199 | # for the attention scores. 200 | attention_mask = create_attention_mask_from_input_mask( 201 | input_ids, input_mask) 202 | 203 | # Run the stacked transformer. 204 | # `sequence_output` shape = [batch_size, seq_length, hidden_size]. 205 | self.all_encoder_layers = transformer_model( 206 | input_tensor=self.embedding_output, 207 | attention_mask=attention_mask, 208 | hidden_size=config.hidden_size, 209 | num_hidden_layers=config.num_hidden_layers, 210 | num_attention_heads=config.num_attention_heads, 211 | intermediate_size=config.intermediate_size, 212 | intermediate_act_fn=get_activation(config.hidden_act), 213 | hidden_dropout_prob=config.hidden_dropout_prob, 214 | attention_probs_dropout_prob=config.attention_probs_dropout_prob, 215 | initializer_range=config.initializer_range, 216 | do_return_all_layers=True) 217 | 218 | self.sequence_output = self.all_encoder_layers[-1] 219 | # The "pooler" converts the encoded sequence tensor of shape 220 | # [batch_size, seq_length, hidden_size] to a tensor of shape 221 | # [batch_size, hidden_size]. This is necessary for segment-level 222 | # (or segment-pair-level) classification tasks where we need a fixed 223 | # dimensional representation of the segment. 224 | with tf.variable_scope("pooler"): 225 | # We "pool" the model by simply taking the hidden state corresponding 226 | # to the first token. We assume that this has been pre-trained 227 | first_token_tensor = tf.squeeze(self.sequence_output[:, 0:1, :], axis=1) 228 | self.pooled_output = tf.layers.dense( 229 | first_token_tensor, 230 | config.hidden_size, 231 | activation=tf.tanh, 232 | kernel_initializer=create_initializer(config.initializer_range)) 233 | 234 | def get_pooled_output(self): 235 | return self.pooled_output 236 | 237 | def get_sequence_output(self): 238 | """Gets final hidden layer of encoder. 239 | 240 | Returns: 241 | float Tensor of shape [batch_size, seq_length, hidden_size] corresponding 242 | to the final hidden of the transformer encoder. 243 | """ 244 | return self.sequence_output 245 | 246 | def get_all_encoder_layers(self): 247 | return self.all_encoder_layers 248 | 249 | def get_embedding_output(self): 250 | """Gets output of the embedding lookup (i.e., input to the transformer). 251 | 252 | Returns: 253 | float Tensor of shape [batch_size, seq_length, hidden_size] corresponding 254 | to the output of the embedding layer, after summing the word 255 | embeddings with the positional embeddings and the token type embeddings, 256 | then performing layer normalization. This is the input to the transformer. 257 | """ 258 | return self.embedding_output 259 | 260 | def get_embedding_table(self): 261 | return self.embedding_table 262 | 263 | 264 | def gelu(x): 265 | """Gaussian Error Linear Unit. 266 | 267 | This is a smoother version of the RELU. 268 | Original paper: https://arxiv.org/abs/1606.08415 269 | Args: 270 | x: float Tensor to perform activation. 271 | 272 | Returns: 273 | `x` with the GELU activation applied. 274 | """ 275 | cdf = 0.5 * (1.0 + tf.tanh( 276 | (np.sqrt(2 / np.pi) * (x + 0.044715 * tf.pow(x, 3))))) 277 | return x * cdf 278 | 279 | 280 | def get_activation(activation_string): 281 | """Maps a string to a Python function, e.g., "relu" => `tf.nn.relu`. 282 | 283 | Args: 284 | activation_string: String name of the activation function. 285 | 286 | Returns: 287 | A Python function corresponding to the activation function. If 288 | `activation_string` is None, empty, or "linear", this will return None. 289 | If `activation_string` is not a string, it will return `activation_string`. 290 | 291 | Raises: 292 | ValueError: The `activation_string` does not correspond to a known 293 | activation. 294 | """ 295 | 296 | # We assume that anything that"s not a string is already an activation 297 | # function, so we just return it. 298 | if not isinstance(activation_string, six.string_types): 299 | return activation_string 300 | 301 | if not activation_string: 302 | return None 303 | 304 | act = activation_string.lower() 305 | if act == "linear": 306 | return None 307 | elif act == "relu": 308 | return tf.nn.relu 309 | elif act == "gelu": 310 | return gelu 311 | elif act == "t" \ 312 | "anh": 313 | return tf.tanh 314 | else: 315 | raise ValueError("Unsupported activation: %s" % act) 316 | 317 | 318 | def get_assignment_map_from_checkpoint(tvars, init_checkpoint): 319 | """Compute the union of the current variables and checkpoint variables.""" 320 | assignment_map = {} 321 | initialized_variable_names = {} 322 | 323 | name_to_variable = collections.OrderedDict() 324 | for var in tvars: 325 | name = var.name 326 | m = re.match("^(.*):\\d+$", name) 327 | if m is not None: 328 | name = m.group(1) 329 | name_to_variable[name] = var 330 | 331 | init_vars = tf.train.list_variables(init_checkpoint) 332 | 333 | assignment_map = collections.OrderedDict() 334 | for x in init_vars: 335 | (name, var) = (x[0], x[1]) 336 | if name not in name_to_variable: 337 | continue 338 | assignment_map[name] = name 339 | initialized_variable_names[name] = 1 340 | initialized_variable_names[name + ":0"] = 1 341 | 342 | return (assignment_map, initialized_variable_names) 343 | 344 | 345 | def dropout(input_tensor, dropout_prob): 346 | """Perform dropout. 347 | 348 | Args: 349 | input_tensor: float Tensor. 350 | dropout_prob: Python float. The probability of dropping out a value (NOT of 351 | *keeping* a dimension as in `tf.nn.dropout`). 352 | 353 | Returns: 354 | A version of `input_tensor` with dropout applied. 355 | """ 356 | if dropout_prob is None or dropout_prob == 0.0: 357 | return input_tensor 358 | 359 | output = tf.nn.dropout(input_tensor, 1.0 - dropout_prob) 360 | return output 361 | 362 | 363 | def layer_norm(input_tensor, name=None): 364 | """Run layer normalization on the last dimension of the tensor.""" 365 | return tf.contrib.layers.layer_norm( 366 | inputs=input_tensor, begin_norm_axis=-1, begin_params_axis=-1, scope=name) 367 | 368 | 369 | def layer_norm_and_dropout(input_tensor, dropout_prob, name=None): 370 | """Runs layer normalization followed by dropout.""" 371 | output_tensor = layer_norm(input_tensor, name) 372 | output_tensor = dropout(output_tensor, dropout_prob) 373 | return output_tensor 374 | 375 | 376 | def create_initializer(initializer_range=0.02): 377 | """Creates a `truncated_normal_initializer` with the given range.""" 378 | return tf.truncated_normal_initializer(stddev=initializer_range) 379 | 380 | 381 | def embedding_lookup(input_ids, 382 | vocab_size, 383 | embedding_size=128, 384 | initializer_range=0.02, 385 | word_embedding_name="word_embeddings", 386 | use_one_hot_embeddings=False): 387 | """Looks up words embeddings for id tensor. 388 | 389 | Args: 390 | input_ids: int32 Tensor of shape [batch_size, seq_length] containing word 391 | ids. 392 | vocab_size: int. Size of the embedding vocabulary. 393 | embedding_size: int. Width of the word embeddings. 394 | initializer_range: float. Embedding initialization range. 395 | word_embedding_name: string. Name of the embedding table. 396 | use_one_hot_embeddings: bool. If True, use one-hot method for word 397 | embeddings. If False, use `tf.gather()`. 398 | 399 | Returns: 400 | float Tensor of shape [batch_size, seq_length, embedding_size]. 401 | """ 402 | # This function assumes that the input is of shape [batch_size, seq_length, 403 | # num_inputs]. 404 | # 405 | # If the input is a 2D tensor of shape [batch_size, seq_length], we 406 | # reshape to [batch_size, seq_length, 1]. 407 | if input_ids.shape.ndims == 2: 408 | input_ids = tf.expand_dims(input_ids, axis=[-1]) 409 | 410 | embedding_table = tf.get_variable( 411 | name=word_embedding_name, 412 | shape=[vocab_size, embedding_size], 413 | initializer=create_initializer(initializer_range)) 414 | 415 | flat_input_ids = tf.reshape(input_ids, [-1]) 416 | if use_one_hot_embeddings: 417 | one_hot_input_ids = tf.one_hot(flat_input_ids, depth=vocab_size) 418 | output = tf.matmul(one_hot_input_ids, embedding_table) 419 | else: 420 | output = tf.gather(embedding_table, flat_input_ids) 421 | 422 | input_shape = get_shape_list(input_ids) 423 | 424 | output = tf.reshape(output, 425 | input_shape[0:-1] + [input_shape[-1] * embedding_size]) 426 | return (output, embedding_table) 427 | 428 | 429 | def embedding_postprocessor(input_tensor, 430 | use_token_type=False, 431 | token_type_ids=None, 432 | token_type_vocab_size=16, 433 | token_type_embedding_name="token_type_embeddings", 434 | use_position_embeddings=True, 435 | position_embedding_name="position_embeddings", 436 | initializer_range=0.02, 437 | max_position_embeddings=512, 438 | dropout_prob=0.1): 439 | """Performs various post-processing on a word embedding tensor. 440 | 441 | Args: 442 | input_tensor: float Tensor of shape [batch_size, seq_length, 443 | embedding_size]. 444 | use_token_type: bool. Whether to add embeddings for `token_type_ids`. 445 | token_type_ids: (optional) int32 Tensor of shape [batch_size, seq_length]. 446 | Must be specified if `use_token_type` is True. 447 | token_type_vocab_size: int. The vocabulary size of `token_type_ids`. 448 | token_type_embedding_name: string. The name of the embedding table variable 449 | for token type ids. 450 | use_position_embeddings: bool. Whether to add position embeddings for the 451 | position of each token in the sequence. 452 | position_embedding_name: string. The name of the embedding table variable 453 | for positional embeddings. 454 | initializer_range: float. Range of the weight initialization. 455 | max_position_embeddings: int. Maximum sequence length that might ever be 456 | used with this model. This can be longer than the sequence length of 457 | input_tensor, but cannot be shorter. 458 | dropout_prob: float. Dropout probability applied to the final output tensor. 459 | 460 | Returns: 461 | float tensor with same shape as `input_tensor`. 462 | 463 | Raises: 464 | ValueError: One of the tensor shapes or input values is invalid. 465 | """ 466 | input_shape = get_shape_list(input_tensor, expected_rank=3) 467 | batch_size = input_shape[0] 468 | seq_length = input_shape[1] 469 | width = input_shape[2] 470 | 471 | output = input_tensor 472 | 473 | if use_token_type: 474 | if token_type_ids is None: 475 | raise ValueError("`token_type_ids` must be specified if" 476 | "`use_token_type` is True.") 477 | token_type_table = tf.get_variable( 478 | name=token_type_embedding_name, 479 | shape=[token_type_vocab_size, width], 480 | initializer=create_initializer(initializer_range)) 481 | # This vocab will be small so we always do one-hot here, since it is always 482 | # faster for a small vocabulary. 483 | flat_token_type_ids = tf.reshape(token_type_ids, [-1]) 484 | one_hot_ids = tf.one_hot(flat_token_type_ids, depth=token_type_vocab_size) 485 | token_type_embeddings = tf.matmul(one_hot_ids, token_type_table) 486 | token_type_embeddings = tf.reshape(token_type_embeddings, 487 | [batch_size, seq_length, width]) 488 | output += token_type_embeddings 489 | 490 | if use_position_embeddings: 491 | assert_op = tf.assert_less_equal(seq_length, max_position_embeddings) 492 | with tf.control_dependencies([assert_op]): 493 | full_position_embeddings = tf.get_variable( 494 | name=position_embedding_name, 495 | shape=[max_position_embeddings, width], 496 | initializer=create_initializer(initializer_range)) 497 | # Since the position embedding table is a learned variable, we create it 498 | # using a (long) sequence length `max_position_embeddings`. The actual 499 | # sequence length might be shorter than this, for faster training of 500 | # tasks that do not have long sequences. 501 | # 502 | # So `full_position_embeddings` is effectively an embedding table 503 | # for position [0, 1, 2, ..., max_position_embeddings-1], and the current 504 | # sequence has positions [0, 1, 2, ... seq_length-1], so we can just 505 | # perform a slice. 506 | position_embeddings = tf.slice(full_position_embeddings, [0, 0], 507 | [seq_length, -1]) 508 | num_dims = len(output.shape.as_list()) 509 | 510 | # Only the last two dimensions are relevant (`seq_length` and `width`), so 511 | # we broadcast among the first dimensions, which is typically just 512 | # the batch size. 513 | position_broadcast_shape = [] 514 | for _ in range(num_dims - 2): 515 | position_broadcast_shape.append(1) 516 | position_broadcast_shape.extend([seq_length, width]) 517 | position_embeddings = tf.reshape(position_embeddings, 518 | position_broadcast_shape) 519 | output += position_embeddings 520 | 521 | output = layer_norm_and_dropout(output, dropout_prob) 522 | return output 523 | 524 | 525 | def create_attention_mask_from_input_mask(from_tensor, to_mask): 526 | """Create 3D attention mask from a 2D tensor mask. 527 | 528 | Args: 529 | from_tensor: 2D or 3D Tensor of shape [batch_size, from_seq_length, ...]. 530 | to_mask: int32 Tensor of shape [batch_size, to_seq_length]. 531 | 532 | Returns: 533 | float Tensor of shape [batch_size, from_seq_length, to_seq_length]. 534 | """ 535 | from_shape = get_shape_list(from_tensor, expected_rank=[2, 3]) 536 | batch_size = from_shape[0] 537 | from_seq_length = from_shape[1] 538 | 539 | to_shape = get_shape_list(to_mask, expected_rank=2) 540 | to_seq_length = to_shape[1] 541 | 542 | to_mask = tf.cast( 543 | tf.reshape(to_mask, [batch_size, 1, to_seq_length]), tf.float32) 544 | 545 | # We don't assume that `from_tensor` is a mask (although it could be). We 546 | # don't actually care if we attend *from* padding tokens (only *to* padding) 547 | # tokens so we create a tensor of all ones. 548 | # 549 | # `broadcast_ones` = [batch_size, from_seq_length, 1] 550 | broadcast_ones = tf.ones( 551 | shape=[batch_size, from_seq_length, 1], dtype=tf.float32) 552 | 553 | # Here we broadcast along two dimensions to create the mask. 554 | mask = broadcast_ones * to_mask 555 | 556 | return mask 557 | 558 | 559 | def attention_layer(from_tensor, 560 | to_tensor, 561 | attention_mask=None, 562 | num_attention_heads=1, 563 | size_per_head=512, 564 | query_act=None, 565 | key_act=None, 566 | value_act=None, 567 | attention_probs_dropout_prob=0.0, 568 | initializer_range=0.02, 569 | do_return_2d_tensor=False, 570 | batch_size=None, 571 | from_seq_length=None, 572 | to_seq_length=None): 573 | """Performs multi-headed attention from `from_tensor` to `to_tensor`. 574 | 575 | This is an implementation of multi-headed attention based on "Attention 576 | is all you Need". If `from_tensor` and `to_tensor` are the same, then 577 | this is self-attention. Each timestep in `from_tensor` attends to the 578 | corresponding sequence in `to_tensor`, and returns a fixed-with vector. 579 | 580 | This function first projects `from_tensor` into a "query" tensor and 581 | `to_tensor` into "key" and "value" tensors. These are (effectively) a list 582 | of tensors of length `num_attention_heads`, where each tensor is of shape 583 | [batch_size, seq_length, size_per_head]. 584 | 585 | Then, the query and key tensors are dot-producted and scaled. These are 586 | softmaxed to obtain attention probabilities. The value tensors are then 587 | interpolated by these probabilities, then concatenated back to a single 588 | tensor and returned. 589 | 590 | In practice, the multi-headed attention are done with transposes and 591 | reshapes rather than actual separate tensors. 592 | 593 | Args: 594 | from_tensor: float Tensor of shape [batch_size, from_seq_length, 595 | from_width]. 596 | to_tensor: float Tensor of shape [batch_size, to_seq_length, to_width]. 597 | attention_mask: (optional) int32 Tensor of shape [batch_size, 598 | from_seq_length, to_seq_length]. The values should be 1 or 0. The 599 | attention scores will effectively be set to -infinity for any positions in 600 | the mask that are 0, and will be unchanged for positions that are 1. 601 | num_attention_heads: int. Number of attention heads. 602 | size_per_head: int. Size of each attention head. 603 | query_act: (optional) Activation function for the query transform. 604 | key_act: (optional) Activation function for the key transform. 605 | value_act: (optional) Activation function for the value transform. 606 | attention_probs_dropout_prob: (optional) float. Dropout probability of the 607 | attention probabilities. 608 | initializer_range: float. Range of the weight initializer. 609 | do_return_2d_tensor: bool. If True, the output will be of shape [batch_size 610 | * from_seq_length, num_attention_heads * size_per_head]. If False, the 611 | output will be of shape [batch_size, from_seq_length, num_attention_heads 612 | * size_per_head]. 613 | batch_size: (Optional) int. If the input is 2D, this might be the batch size 614 | of the 3D version of the `from_tensor` and `to_tensor`. 615 | from_seq_length: (Optional) If the input is 2D, this might be the seq length 616 | of the 3D version of the `from_tensor`. 617 | to_seq_length: (Optional) If the input is 2D, this might be the seq length 618 | of the 3D version of the `to_tensor`. 619 | 620 | Returns: 621 | float Tensor of shape [batch_size, from_seq_length, 622 | num_attention_heads * size_per_head]. (If `do_return_2d_tensor` is 623 | true, this will be of shape [batch_size * from_seq_length, 624 | num_attention_heads * size_per_head]). 625 | 626 | Raises: 627 | ValueError: Any of the arguments or tensor shapes are invalid. 628 | """ 629 | 630 | def transpose_for_scores(input_tensor, batch_size, num_attention_heads, 631 | seq_length, width): 632 | output_tensor = tf.reshape( 633 | input_tensor, [batch_size, seq_length, num_attention_heads, width]) 634 | 635 | output_tensor = tf.transpose(output_tensor, [0, 2, 1, 3]) 636 | return output_tensor 637 | 638 | from_shape = get_shape_list(from_tensor, expected_rank=[2, 3]) 639 | to_shape = get_shape_list(to_tensor, expected_rank=[2, 3]) 640 | 641 | if len(from_shape) != len(to_shape): 642 | raise ValueError( 643 | "The rank of `from_tensor` must match the rank of `to_tensor`.") 644 | 645 | if len(from_shape) == 3: 646 | batch_size = from_shape[0] 647 | from_seq_length = from_shape[1] 648 | to_seq_length = to_shape[1] 649 | elif len(from_shape) == 2: 650 | if (batch_size is None or from_seq_length is None or to_seq_length is None): 651 | raise ValueError( 652 | "When passing in rank 2 tensors to attention_layer, the values " 653 | "for `batch_size`, `from_seq_length`, and `to_seq_length` " 654 | "must all be specified.") 655 | 656 | # Scalar dimensions referenced here: 657 | # B = batch size (number of sequences) 658 | # F = `from_tensor` sequence length 659 | # T = `to_tensor` sequence length 660 | # N = `num_attention_heads` 661 | # H = `size_per_head` 662 | 663 | from_tensor_2d = reshape_to_matrix(from_tensor) 664 | to_tensor_2d = reshape_to_matrix(to_tensor) 665 | 666 | # `query_layer` = [B*F, N*H] 667 | query_layer = tf.layers.dense( 668 | from_tensor_2d, 669 | num_attention_heads * size_per_head, 670 | activation=query_act, 671 | name="query", 672 | kernel_initializer=create_initializer(initializer_range)) 673 | 674 | # `key_layer` = [B*T, N*H] 675 | key_layer = tf.layers.dense( 676 | to_tensor_2d, 677 | num_attention_heads * size_per_head, 678 | activation=key_act, 679 | name="key", 680 | kernel_initializer=create_initializer(initializer_range)) 681 | 682 | # `value_layer` = [B*T, N*H] 683 | value_layer = tf.layers.dense( 684 | to_tensor_2d, 685 | num_attention_heads * size_per_head, 686 | activation=value_act, 687 | name="value", 688 | kernel_initializer=create_initializer(initializer_range)) 689 | 690 | # `query_layer` = [B, N, F, H] 691 | query_layer = transpose_for_scores(query_layer, batch_size, 692 | num_attention_heads, from_seq_length, 693 | size_per_head) 694 | 695 | # `key_layer` = [B, N, T, H] 696 | key_layer = transpose_for_scores(key_layer, batch_size, num_attention_heads, 697 | to_seq_length, size_per_head) 698 | 699 | # Take the dot product between "query" and "key" to get the raw 700 | # attention scores. 701 | # `attention_scores` = [B, N, F, T] 702 | attention_scores = tf.matmul(query_layer, key_layer, transpose_b=True) 703 | attention_scores = tf.multiply(attention_scores, 704 | 1.0 / math.sqrt(float(size_per_head))) 705 | 706 | if attention_mask is not None: 707 | # `attention_mask` = [B, 1, F, T] 708 | attention_mask = tf.expand_dims(attention_mask, axis=[1]) 709 | 710 | # Since attention_mask is 1.0 for positions we want to attend and 0.0 for 711 | # masked positions, this operation will create a tensor which is 0.0 for 712 | # positions we want to attend and -10000.0 for masked positions. 713 | adder = (1.0 - tf.cast(attention_mask, tf.float32)) * -10000.0 714 | 715 | # Since we are adding it to the raw scores before the softmax, this is 716 | # effectively the same as removing these entirely. 717 | attention_scores += adder 718 | 719 | # Normalize the attention scores to probabilities. 720 | # `attention_probs` = [B, N, F, T] 721 | attention_probs = tf.nn.softmax(attention_scores) 722 | 723 | # This is actually dropping out entire tokens to attend to, which might 724 | # seem a bit unusual, but is taken from the original Transformer paper. 725 | attention_probs = dropout(attention_probs, attention_probs_dropout_prob) 726 | 727 | # `value_layer` = [B, T, N, H] 728 | value_layer = tf.reshape( 729 | value_layer, 730 | [batch_size, to_seq_length, num_attention_heads, size_per_head]) 731 | 732 | # `value_layer` = [B, N, T, H] 733 | value_layer = tf.transpose(value_layer, [0, 2, 1, 3]) 734 | 735 | # `context_layer` = [B, N, F, H] 736 | context_layer = tf.matmul(attention_probs, value_layer) 737 | 738 | # `context_layer` = [B, F, N, H] 739 | context_layer = tf.transpose(context_layer, [0, 2, 1, 3]) 740 | 741 | if do_return_2d_tensor: 742 | # `context_layer` = [B*F, N*H] 743 | context_layer = tf.reshape( 744 | context_layer, 745 | [batch_size * from_seq_length, num_attention_heads * size_per_head]) 746 | else: 747 | # `context_layer` = [B, F, N*H] 748 | context_layer = tf.reshape( 749 | context_layer, 750 | [batch_size, from_seq_length, num_attention_heads * size_per_head]) 751 | 752 | return context_layer 753 | 754 | 755 | def transformer_model(input_tensor, 756 | attention_mask=None, 757 | hidden_size=768, 758 | num_hidden_layers=12, 759 | num_attention_heads=12, 760 | intermediate_size=3072, 761 | intermediate_act_fn=gelu, 762 | hidden_dropout_prob=0.1, 763 | attention_probs_dropout_prob=0.1, 764 | initializer_range=0.02, 765 | do_return_all_layers=False): 766 | """Multi-headed, multi-layer Transformer from "Attention is All You Need". 767 | 768 | This is almost an exact implementation of the original Transformer encoder. 769 | 770 | See the original paper: 771 | https://arxiv.org/abs/1706.03762 772 | 773 | Also see: 774 | https://github.com/tensorflow/tensor2tensor/blob/master/tensor2tensor/models/transformer.py 775 | 776 | Args: 777 | input_tensor: float Tensor of shape [batch_size, seq_length, hidden_size]. 778 | attention_mask: (optional) int32 Tensor of shape [batch_size, seq_length, 779 | seq_length], with 1 for positions that can be attended to and 0 in 780 | positions that should not be. 781 | hidden_size: int. Hidden size of the Transformer. 782 | num_hidden_layers: int. Number of layers (blocks) in the Transformer. 783 | num_attention_heads: int. Number of attention heads in the Transformer. 784 | intermediate_size: int. The size of the "intermediate" (a.k.a., feed 785 | forward) layer. 786 | intermediate_act_fn: function. The non-linear activation function to apply 787 | to the output of the intermediate/feed-forward layer. 788 | hidden_dropout_prob: float. Dropout probability for the hidden layers. 789 | attention_probs_dropout_prob: float. Dropout probability of the attention 790 | probabilities. 791 | initializer_range: float. Range of the initializer (stddev of truncated 792 | normal). 793 | do_return_all_layers: Whether to also return all layers or just the final 794 | layer. 795 | 796 | Returns: 797 | float Tensor of shape [batch_size, seq_length, hidden_size], the final 798 | hidden layer of the Transformer. 799 | 800 | Raises: 801 | ValueError: A Tensor shape or parameter is invalid. 802 | """ 803 | if hidden_size % num_attention_heads != 0: 804 | raise ValueError( 805 | "The hidden size (%d) is not a multiple of the number of attention " 806 | "heads (%d)" % (hidden_size, num_attention_heads)) 807 | 808 | attention_head_size = int(hidden_size / num_attention_heads) 809 | input_shape = get_shape_list(input_tensor, expected_rank=3) 810 | batch_size = input_shape[0] 811 | seq_length = input_shape[1] 812 | input_width = input_shape[2] 813 | 814 | # The Transformer performs sum residuals on all layers so the input needs 815 | # to be the same as the hidden size. 816 | if input_width != hidden_size: 817 | raise ValueError("The width of the input tensor (%d) != hidden size (%d)" % 818 | (input_width, hidden_size)) 819 | 820 | # We keep the representation as a 2D tensor to avoid re-shaping it back and 821 | # forth from a 3D tensor to a 2D tensor. Re-shapes are normally free on 822 | # the GPU/CPU but may not be free on the TPU, so we want to minimize them to 823 | # help the optimizer. 824 | prev_output = reshape_to_matrix(input_tensor) 825 | 826 | all_layer_outputs = [] 827 | for layer_idx in range(num_hidden_layers): 828 | with tf.variable_scope("layer_%d" % layer_idx): 829 | layer_input = prev_output 830 | 831 | with tf.variable_scope("attention"): 832 | attention_heads = [] 833 | with tf.variable_scope("self"): 834 | attention_head = attention_layer( 835 | from_tensor=layer_input, 836 | to_tensor=layer_input, 837 | attention_mask=attention_mask, 838 | num_attention_heads=num_attention_heads, 839 | size_per_head=attention_head_size, 840 | attention_probs_dropout_prob=attention_probs_dropout_prob, 841 | initializer_range=initializer_range, 842 | do_return_2d_tensor=True, 843 | batch_size=batch_size, 844 | from_seq_length=seq_length, 845 | to_seq_length=seq_length) 846 | attention_heads.append(attention_head) 847 | 848 | attention_output = None 849 | if len(attention_heads) == 1: 850 | attention_output = attention_heads[0] 851 | else: 852 | # In the case where we have other sequences, we just concatenate 853 | # them to the self-attention head before the projection. 854 | attention_output = tf.concat(attention_heads, axis=-1) 855 | 856 | # Run a linear projection of `hidden_size` then add a residual 857 | # with `layer_input`. 858 | with tf.variable_scope("output"): 859 | attention_output = tf.layers.dense( 860 | attention_output, 861 | hidden_size, 862 | kernel_initializer=create_initializer(initializer_range)) 863 | attention_output = dropout(attention_output, hidden_dropout_prob) 864 | attention_output = layer_norm(attention_output + layer_input) 865 | 866 | # The activation is only applied to the "intermediate" hidden layer. 867 | with tf.variable_scope("intermediate"): 868 | intermediate_output = tf.layers.dense( 869 | attention_output, 870 | intermediate_size, 871 | activation=intermediate_act_fn, 872 | kernel_initializer=create_initializer(initializer_range)) 873 | 874 | # Down-project back to `hidden_size` then add the residual. 875 | with tf.variable_scope("output"): 876 | layer_output = tf.layers.dense( 877 | intermediate_output, 878 | hidden_size, 879 | kernel_initializer=create_initializer(initializer_range)) 880 | layer_output = dropout(layer_output, hidden_dropout_prob) 881 | layer_output = layer_norm(layer_output + attention_output) 882 | prev_output = layer_output 883 | all_layer_outputs.append(layer_output) 884 | 885 | if do_return_all_layers: 886 | final_outputs = [] 887 | for layer_output in all_layer_outputs: 888 | final_output = reshape_from_matrix(layer_output, input_shape) 889 | final_outputs.append(final_output) 890 | return final_outputs 891 | else: 892 | final_output = reshape_from_matrix(prev_output, input_shape) 893 | return final_output 894 | 895 | 896 | def get_shape_list(tensor, expected_rank=None, name=None): 897 | """Returns a list of the shape of tensor, preferring static dimensions. 898 | 899 | Args: 900 | tensor: A tf.Tensor object to find the shape of. 901 | expected_rank: (optional) int. The expected rank of `tensor`. If this is 902 | specified and the `tensor` has a different rank, and exception will be 903 | thrown. 904 | name: Optional name of the tensor for the error message. 905 | 906 | Returns: 907 | A list of dimensions of the shape of tensor. All static dimensions will 908 | be returned as python integers, and dynamic dimensions will be returned 909 | as tf.Tensor scalars. 910 | """ 911 | if name is None: 912 | name = tensor.name 913 | 914 | if expected_rank is not None: 915 | assert_rank(tensor, expected_rank, name) 916 | 917 | shape = tensor.shape.as_list() 918 | 919 | non_static_indexes = [] 920 | for (index, dim) in enumerate(shape): 921 | if dim is None: 922 | non_static_indexes.append(index) 923 | 924 | if not non_static_indexes: 925 | return shape 926 | 927 | dyn_shape = tf.shape(tensor) 928 | for index in non_static_indexes: 929 | shape[index] = dyn_shape[index] 930 | return shape 931 | 932 | 933 | def reshape_to_matrix(input_tensor): 934 | """Reshapes a >= rank 2 tensor to a rank 2 tensor (i.e., a matrix).""" 935 | ndims = input_tensor.shape.ndims 936 | if ndims < 2: 937 | raise ValueError("Input tensor must have at least rank 2. Shape = %s" % 938 | (input_tensor.shape)) 939 | if ndims == 2: 940 | return input_tensor 941 | 942 | width = input_tensor.shape[-1] 943 | output_tensor = tf.reshape(input_tensor, [-1, width]) 944 | return output_tensor 945 | 946 | 947 | def reshape_from_matrix(output_tensor, orig_shape_list): 948 | """Reshapes a rank 2 tensor back to its original rank >= 2 tensor.""" 949 | if len(orig_shape_list) == 2: 950 | return output_tensor 951 | 952 | output_shape = get_shape_list(output_tensor) 953 | 954 | orig_dims = orig_shape_list[0:-1] 955 | width = output_shape[-1] 956 | 957 | return tf.reshape(output_tensor, orig_dims + [width]) 958 | 959 | 960 | def assert_rank(tensor, expected_rank, name=None): 961 | """Raises an exception if the tensor rank is not of the expected rank. 962 | 963 | Args: 964 | tensor: A tf.Tensor to check the rank of. 965 | expected_rank: Python integer or list of integers, expected rank. 966 | name: Optional name of the tensor for the error message. 967 | 968 | Raises: 969 | ValueError: If the expected shape doesn't match the actual shape. 970 | """ 971 | if name is None: 972 | name = tensor.name 973 | 974 | expected_rank_dict = {} 975 | if isinstance(expected_rank, six.integer_types): 976 | expected_rank_dict[expected_rank] = True 977 | else: 978 | for x in expected_rank: 979 | expected_rank_dict[x] = True 980 | 981 | actual_rank = tensor.shape.ndims 982 | if actual_rank not in expected_rank_dict: 983 | scope_name = tf.get_variable_scope().name 984 | raise ValueError( 985 | "For the tensor `%s` in scope `%s`, the actual rank " 986 | "`%d` (shape = %s) is not equal to the expected rank `%s`" % 987 | (name, scope_name, actual_rank, str(tensor.shape), str(expected_rank))) 988 | -------------------------------------------------------------------------------- /optimization.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | # Copyright 2018 The Google AI Language Team Authors. 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | """Functions and classes related to optimization (weight updates).""" 16 | 17 | from __future__ import absolute_import 18 | from __future__ import division 19 | from __future__ import print_function 20 | 21 | import re 22 | import tensorflow as tf 23 | 24 | 25 | def create_optimizer(loss, init_lr, num_train_steps, num_warmup_steps, use_tpu): 26 | """Creates an optimizer training op.""" 27 | global_step = tf.train.get_or_create_global_step() 28 | 29 | learning_rate = tf.constant(value=init_lr, shape=[], dtype=tf.float32) 30 | 31 | # Implements linear decay of the learning rate. 32 | learning_rate = tf.train.polynomial_decay( 33 | learning_rate, 34 | global_step, 35 | num_train_steps, 36 | end_learning_rate=0.0, 37 | power=1.0, 38 | cycle=False) 39 | 40 | # Implements linear warmup. I.e., if global_step < num_warmup_steps, the 41 | # learning rate will be `global_step/num_warmup_steps * init_lr`. 42 | if num_warmup_steps: 43 | global_steps_int = tf.cast(global_step, tf.int32) 44 | warmup_steps_int = tf.constant(num_warmup_steps, dtype=tf.int32) 45 | 46 | global_steps_float = tf.cast(global_steps_int, tf.float32) 47 | warmup_steps_float = tf.cast(warmup_steps_int, tf.float32) 48 | 49 | warmup_percent_done = global_steps_float / warmup_steps_float 50 | warmup_learning_rate = init_lr * warmup_percent_done 51 | 52 | is_warmup = tf.cast(global_steps_int < warmup_steps_int, tf.float32) 53 | learning_rate = ( 54 | (1.0 - is_warmup) * learning_rate + is_warmup * warmup_learning_rate) 55 | 56 | # It is recommended that you use this optimizer for fine tuning, since this 57 | # is how the model was trained (note that the Adam m/v variables are NOT 58 | # loaded from init_checkpoint.) 59 | optimizer = AdamWeightDecayOptimizer( 60 | learning_rate=learning_rate, 61 | weight_decay_rate=0.01, 62 | beta_1=0.9, 63 | beta_2=0.999, 64 | epsilon=1e-6, 65 | exclude_from_weight_decay=["LayerNorm", "layer_norm", "bias"]) 66 | 67 | if use_tpu: 68 | optimizer = tf.contrib.tpu.CrossShardOptimizer(optimizer) 69 | 70 | tvars = tf.trainable_variables() 71 | grads = tf.gradients(loss, tvars) 72 | 73 | # This is how the model was pre-trained. 74 | (grads, _) = tf.clip_by_global_norm(grads, clip_norm=1.0) 75 | 76 | train_op = optimizer.apply_gradients( 77 | zip(grads, tvars), global_step=global_step) 78 | 79 | # Normally the global step update is done inside of `apply_gradients`. 80 | # However, `AdamWeightDecayOptimizer` doesn't do this. But if you use 81 | # a different optimizer, you should probably take this line out. 82 | new_global_step = global_step + 1 83 | train_op = tf.group(train_op, [global_step.assign(new_global_step)]) 84 | return train_op 85 | 86 | 87 | class AdamWeightDecayOptimizer(tf.train.Optimizer): 88 | """A basic Adam optimizer that includes "correct" L2 weight decay.""" 89 | 90 | def __init__(self, 91 | learning_rate, 92 | weight_decay_rate=0.0, 93 | beta_1=0.9, 94 | beta_2=0.999, 95 | epsilon=1e-6, 96 | exclude_from_weight_decay=None, 97 | name="AdamWeightDecayOptimizer"): 98 | """Constructs a AdamWeightDecayOptimizer.""" 99 | super(AdamWeightDecayOptimizer, self).__init__(False, name) 100 | 101 | self.learning_rate = learning_rate 102 | self.weight_decay_rate = weight_decay_rate 103 | self.beta_1 = beta_1 104 | self.beta_2 = beta_2 105 | self.epsilon = epsilon 106 | self.exclude_from_weight_decay = exclude_from_weight_decay 107 | 108 | def apply_gradients(self, grads_and_vars, global_step=None, name=None): 109 | """See base class.""" 110 | assignments = [] 111 | for (grad, param) in grads_and_vars: 112 | if grad is None or param is None: 113 | continue 114 | 115 | param_name = self._get_variable_name(param.name) 116 | 117 | m = tf.get_variable( 118 | name=param_name + "/adam_m", 119 | shape=param.shape.as_list(), 120 | dtype=tf.float32, 121 | trainable=False, 122 | initializer=tf.zeros_initializer()) 123 | v = tf.get_variable( 124 | name=param_name + "/adam_v", 125 | shape=param.shape.as_list(), 126 | dtype=tf.float32, 127 | trainable=False, 128 | initializer=tf.zeros_initializer()) 129 | 130 | # Standard Adam update. 131 | next_m = ( 132 | tf.multiply(self.beta_1, m) + tf.multiply(1.0 - self.beta_1, grad)) 133 | next_v = ( 134 | tf.multiply(self.beta_2, v) + tf.multiply(1.0 - self.beta_2, 135 | tf.square(grad))) 136 | 137 | update = next_m / (tf.sqrt(next_v) + self.epsilon) 138 | 139 | # Just adding the square of the weights to the loss function is *not* 140 | # the correct way of using L2 regularization/weight decay with Adam, 141 | # since that will interact with the m and v parameters in strange ways. 142 | # 143 | # Instead we want ot decay the weights in a manner that doesn't interact 144 | # with the m/v parameters. This is equivalent to adding the square 145 | # of the weights to the loss with plain (non-momentum) SGD. 146 | if self._do_use_weight_decay(param_name): 147 | update += self.weight_decay_rate * param 148 | 149 | update_with_lr = self.learning_rate * update 150 | 151 | next_param = param - update_with_lr 152 | 153 | assignments.extend( 154 | [param.assign(next_param), 155 | m.assign(next_m), 156 | v.assign(next_v)]) 157 | return tf.group(*assignments, name=name) 158 | 159 | def _do_use_weight_decay(self, param_name): 160 | """Whether to use L2 weight decay for `param_name`.""" 161 | if not self.weight_decay_rate: 162 | return False 163 | if self.exclude_from_weight_decay: 164 | for r in self.exclude_from_weight_decay: 165 | if re.search(r, param_name) is not None: 166 | return False 167 | return True 168 | 169 | def _get_variable_name(self, param_name): 170 | """Get the variable name from the tensor name.""" 171 | m = re.match("^(.*):\\d+$", param_name) 172 | if m is not None: 173 | param_name = m.group(1) 174 | return param_name 175 | -------------------------------------------------------------------------------- /predict_GPU.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | ''' 3 | @author: yaleimeng@sina.com 4 | @license: (C) Copyright 2019 5 | @desc: 这个代码是进行预测的。既可以根据ckpt检查点,也可以根据单个pb模型。 6 | @DateTime: Created on 2019/7/19, at 下午 04:13 by PyCharm 7 | ''' 8 | from train_eval import * 9 | from tensorflow.python.estimator.model_fn import EstimatorSpec 10 | 11 | 12 | class Bert_Class(): 13 | 14 | def __init__(self): 15 | self.graph_path = os.path.join(arg_dic['pb_model_dir'], 'classification_model.pb') 16 | self.ckpt_tool, self.pbTool = None, None 17 | self.prepare() 18 | 19 | def classification_model_fn(self, features, mode): 20 | with tf.gfile.GFile(self.graph_path, 'rb') as f: 21 | graph_def = tf.GraphDef() 22 | graph_def.ParseFromString(f.read()) 23 | input_ids = features["input_ids"] 24 | input_mask = features["input_mask"] 25 | input_map = {"input_ids": input_ids, "input_mask": input_mask} 26 | pred_probs = tf.import_graph_def(graph_def, name='', input_map=input_map, return_elements=['pred_prob:0']) 27 | 28 | return EstimatorSpec(mode=mode, predictions={ 29 | 'encodes': tf.argmax(pred_probs[0], axis=-1), 30 | 'score': tf.reduce_max(pred_probs[0], axis=-1)}) 31 | 32 | def prepare(self): 33 | tokenization.validate_case_matches_checkpoint(arg_dic['do_lower_case'], arg_dic['init_checkpoint']) 34 | self.config = modeling.BertConfig.from_json_file(arg_dic['bert_config_file']) 35 | 36 | if arg_dic['max_seq_length'] > self.config.max_position_embeddings: 37 | raise ValueError( 38 | "Cannot use sequence length %d because the BERT model " 39 | "was only trained up to sequence length %d" % 40 | (arg_dic['max_seq_length'], self.config.max_position_embeddings)) 41 | 42 | # tf.gfile.MakeDirs(self.out_dir) 43 | self.tokenizer = tokenization.FullTokenizer(vocab_file=arg_dic['vocab_file'], 44 | do_lower_case=arg_dic['do_lower_case']) 45 | 46 | self.processor = SelfProcessor() 47 | self.train_examples = self.processor.get_train_examples(arg_dic['data_dir']) 48 | global label_list 49 | label_list = self.processor.get_labels() 50 | 51 | self.run_config = tf.estimator.RunConfig( 52 | model_dir=arg_dic['output_dir'], save_checkpoints_steps=arg_dic['save_checkpoints_steps'], 53 | tf_random_seed=None, save_summary_steps=100, session_config=None, keep_checkpoint_max=5, 54 | keep_checkpoint_every_n_hours=10000, log_step_count_steps=100, ) 55 | 56 | def predict_on_ckpt(self, sentence): 57 | if not self.ckpt_tool: 58 | num_train_steps = int(len(self.train_examples) / arg_dic['train_batch_size'] * arg_dic['num_train_epochs']) 59 | num_warmup_steps = int(num_train_steps * arg_dic['warmup_proportion']) 60 | 61 | model_fn = model_fn_builder(bert_config=self.config, num_labels=len(label_list), 62 | init_checkpoint=arg_dic['init_checkpoint'], learning_rate=arg_dic['learning_rate'], 63 | num_train=num_train_steps, num_warmup=num_warmup_steps) 64 | 65 | self.ckpt_tool = tf.estimator.Estimator(model_fn=model_fn, config=self.run_config, ) 66 | exam = self.processor.one_example(sentence) # 待预测的样本列表 67 | feature = convert_single_example(0, exam, label_list, arg_dic['max_seq_length'], self.tokenizer) 68 | 69 | predict_input_fn = input_fn_builder(features=[feature, ], 70 | seq_length=arg_dic['max_seq_length'], is_training=False, 71 | drop_remainder=False) 72 | result = self.ckpt_tool.predict(input_fn=predict_input_fn) # 执行预测操作,得到一个生成器。 73 | gailv = list(result)[0]["probabilities"].tolist() 74 | pos = gailv.index(max(gailv)) # 定位到最大概率值索引, 75 | return label_list[pos] 76 | 77 | def predict_on_pb(self, sentence): 78 | if not self.pbTool: 79 | self.pbTool = tf.estimator.Estimator(model_fn=self.classification_model_fn, config=self.run_config, ) 80 | exam = self.processor.one_example(sentence) # 待预测的样本列表 81 | feature = convert_single_example(0, exam, label_list, arg_dic['max_seq_length'], self.tokenizer) 82 | predict_input_fn = input_fn_builder(features=[feature, ], 83 | seq_length=arg_dic['max_seq_length'], is_training=False, 84 | drop_remainder=False) 85 | result = self.pbTool.predict(input_fn=predict_input_fn) # 执行预测操作,得到一个生成器。 86 | ele = list(result)[0] 87 | print('类别:{},置信度:{:.3f}'.format(label_list[ele['encodes']], ele['score'])) 88 | return label_list[ele['encodes']] 89 | 90 | 91 | if __name__ == "__main__": 92 | import time 93 | 94 | testcase = ['中国高铁动车组通常运行速度是多少?', '梨树种下之后,过几年能结果子?', '青蛙在吃虫子时眼睛是怎样的状态?'] 95 | toy = Bert_Class() 96 | aaa = time.clock() 97 | for t in testcase: 98 | print(toy.predict_on_ckpt(t), t) 99 | bbb = time.clock() 100 | print('ckpt预测用时:', bbb - aaa) 101 | 102 | aaa = time.clock() 103 | for t in testcase: 104 | toy.predict_on_pb(t) 105 | bbb = time.clock() 106 | print('pb模型预测用时:', bbb - aaa) 107 | -------------------------------------------------------------------------------- /server.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | ''' 3 | @author: yaleimeng@sina.com 4 | @license: (C) Copyright 2019 5 | @desc: 项目描述。 6 | @DateTime: Created on 2019/7/22, at 下午 05:07 by PyCharm 7 | ''' 8 | 9 | from sanic import Sanic 10 | from sanic.response import json as Rjson 11 | from predict_GPU import Bert_Class 12 | 13 | app = Sanic() 14 | my = Bert_Class() 15 | 16 | 17 | @app.route("/", methods=['GET', 'POST']) 18 | async def home(request): 19 | # 1,首先要从HTTP请求获取用户的字符串 20 | dict1 = {'tips': '请用POST方法,传递“用户id、question”字段'} 21 | if request.method == 'GET': 22 | user, key_str = request.args.get('user_id'), request.args.get('question') 23 | elif request.method == 'POST': 24 | for k, v in request.form.items(): 25 | dict1[k] = v # 最关心的问题字段是keyword 26 | user, key_str = request.form.get('user_id'), request.form.get('question') 27 | else: 28 | return Rjson(dict1) 29 | if not key_str or not user: # 如果有空的字段,返回警告信息。 30 | return Rjson(dict1) 31 | 32 | # 2,调用自身的功能,执行搜索引擎爬虫 33 | dict1.pop('tips') 34 | dict1['Type'] = my.yuce(key_str) 35 | return Rjson(dict1) 36 | 37 | 38 | if __name__ == "__main__": 39 | app.run(host="0.0.0.0", port=5400) 40 | -------------------------------------------------------------------------------- /tokenization.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | # Copyright 2018 The Google AI Language Team Authors. 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | """Tokenization classes.""" 16 | 17 | from __future__ import absolute_import 18 | from __future__ import division 19 | from __future__ import print_function 20 | 21 | import collections 22 | import re 23 | import unicodedata 24 | import six 25 | import tensorflow as tf 26 | 27 | 28 | def validate_case_matches_checkpoint(do_lower_case, init_checkpoint): 29 | """Checks whether the casing config is consistent with the checkpoint name.""" 30 | 31 | # The casing has to be passed in by the user and there is no explicit check 32 | # as to whether it matches the checkpoint. The casing information probably 33 | # should have been stored in the bert_config.json file, but it's not, so 34 | # we have to heuristically detect it to validate. 35 | 36 | if not init_checkpoint: 37 | return 38 | 39 | m = re.match("^.*?([A-Za-z0-9_-]+)/bert_model.ckpt", init_checkpoint) 40 | if m is None: 41 | return 42 | 43 | model_name = m.group(1) 44 | 45 | lower_models = [ 46 | "uncased_L-24_H-1024_A-16", "uncased_L-12_H-768_A-12", 47 | "multilingual_L-12_H-768_A-12", "chinese_L-12_H-768_A-12" 48 | ] 49 | 50 | cased_models = [ 51 | "cased_L-12_H-768_A-12", "cased_L-24_H-1024_A-16", 52 | "multi_cased_L-12_H-768_A-12" 53 | ] 54 | 55 | is_bad_config = False 56 | if model_name in lower_models and not do_lower_case: 57 | is_bad_config = True 58 | actual_flag = "False" 59 | case_name = "lowercased" 60 | opposite_flag = "True" 61 | 62 | if model_name in cased_models and do_lower_case: 63 | is_bad_config = True 64 | actual_flag = "True" 65 | case_name = "cased" 66 | opposite_flag = "False" 67 | 68 | if is_bad_config: 69 | raise ValueError( 70 | "You passed in `--do_lower_case=%s` with `--init_checkpoint=%s`. " 71 | "However, `%s` seems to be a %s model, so you " 72 | "should pass in `--do_lower_case=%s` so that the fine-tuning matches " 73 | "how the model was pre-training. If this error is wrong, please " 74 | "just comment out this check." % (actual_flag, init_checkpoint, 75 | model_name, case_name, opposite_flag)) 76 | 77 | 78 | def convert_to_unicode(text): 79 | """Converts `text` to Unicode (if it's not already), assuming utf-8 input.""" 80 | if six.PY3: 81 | if isinstance(text, str): 82 | return text 83 | elif isinstance(text, bytes): 84 | return text.decode("utf-8", "ignore") 85 | else: 86 | raise ValueError("Unsupported string type: %s" % (type(text))) 87 | elif six.PY2: 88 | if isinstance(text, str): 89 | return text.decode("utf-8", "ignore") 90 | elif isinstance(text, unicode): 91 | return text 92 | else: 93 | raise ValueError("Unsupported string type: %s" % (type(text))) 94 | else: 95 | raise ValueError("Not running on Python2 or Python 3?") 96 | 97 | 98 | def printable_text(text): 99 | """Returns text encoded in a way suitable for print or `tf.logging`.""" 100 | 101 | # These functions want `str` for both Python2 and Python3, but in one case 102 | # it's a Unicode string and in the other it's a byte string. 103 | if six.PY3: 104 | if isinstance(text, str): 105 | return text 106 | elif isinstance(text, bytes): 107 | return text.decode("utf-8", "ignore") 108 | else: 109 | raise ValueError("Unsupported string type: %s" % (type(text))) 110 | elif six.PY2: 111 | if isinstance(text, str): 112 | return text 113 | elif isinstance(text, unicode): 114 | return text.encode("utf-8") 115 | else: 116 | raise ValueError("Unsupported string type: %s" % (type(text))) 117 | else: 118 | raise ValueError("Not running on Python2 or Python 3?") 119 | 120 | 121 | def load_vocab(vocab_file): 122 | """Loads a vocabulary file into a dictionary.""" 123 | vocab = collections.OrderedDict() 124 | index = 0 125 | with tf.gfile.GFile(vocab_file, "r") as reader: 126 | while True: 127 | token = convert_to_unicode(reader.readline()) 128 | if not token: 129 | break 130 | token = token.strip() 131 | vocab[token] = index 132 | index += 1 133 | return vocab 134 | 135 | 136 | def convert_by_vocab(vocab, items): 137 | """Converts a sequence of [tokens|ids] using the vocab.""" 138 | output = [] 139 | for item in items: 140 | output.append(vocab[item]) 141 | return output 142 | 143 | 144 | def convert_tokens_to_ids(vocab, tokens): 145 | return convert_by_vocab(vocab, tokens) 146 | 147 | 148 | def convert_ids_to_tokens(inv_vocab, ids): 149 | return convert_by_vocab(inv_vocab, ids) 150 | 151 | 152 | def whitespace_tokenize(text): 153 | """Runs basic whitespace cleaning and splitting on a piece of text.""" 154 | text = text.strip() 155 | if not text: 156 | return [] 157 | tokens = text.split() 158 | return tokens 159 | 160 | 161 | class FullTokenizer(object): 162 | """Runs end-to-end tokenziation.""" 163 | 164 | def __init__(self, vocab_file, do_lower_case=True): 165 | self.vocab = load_vocab(vocab_file) 166 | self.inv_vocab = {v: k for k, v in self.vocab.items()} 167 | self.basic_tokenizer = BasicTokenizer(do_lower_case=do_lower_case) 168 | self.wordpiece_tokenizer = WordpieceTokenizer(vocab=self.vocab) 169 | 170 | def tokenize(self, text): 171 | split_tokens = [] 172 | for token in self.basic_tokenizer.tokenize(text): 173 | for sub_token in self.wordpiece_tokenizer.tokenize(token): 174 | split_tokens.append(sub_token) 175 | 176 | return split_tokens 177 | 178 | def convert_tokens_to_ids(self, tokens): 179 | return convert_by_vocab(self.vocab, tokens) 180 | 181 | def convert_ids_to_tokens(self, ids): 182 | return convert_by_vocab(self.inv_vocab, ids) 183 | 184 | 185 | class BasicTokenizer(object): 186 | """Runs basic tokenization (punctuation splitting, lower casing, etc.).""" 187 | 188 | def __init__(self, do_lower_case=True): 189 | """Constructs a BasicTokenizer. 190 | 191 | Args: 192 | do_lower_case: Whether to lower case the input. 193 | """ 194 | self.do_lower_case = do_lower_case 195 | 196 | def tokenize(self, text): 197 | """Tokenizes a piece of text.""" 198 | text = convert_to_unicode(text) 199 | text = self._clean_text(text) 200 | 201 | # This was added on November 1st, 2018 for the multilingual and Chinese 202 | # models. This is also applied to the English models now, but it doesn't 203 | # matter since the English models were not trained on any Chinese data 204 | # and generally don't have any Chinese data in them (there are Chinese 205 | # characters in the vocabulary because Wikipedia does have some Chinese 206 | # words in the English Wikipedia.). 207 | text = self._tokenize_chinese_chars(text) 208 | 209 | orig_tokens = whitespace_tokenize(text) 210 | split_tokens = [] 211 | for token in orig_tokens: 212 | if self.do_lower_case: 213 | token = token.lower() 214 | token = self._run_strip_accents(token) 215 | split_tokens.extend(self._run_split_on_punc(token)) 216 | 217 | output_tokens = whitespace_tokenize(" ".join(split_tokens)) 218 | return output_tokens 219 | 220 | def _run_strip_accents(self, text): 221 | """Strips accents from a piece of text.""" 222 | text = unicodedata.normalize("NFD", text) 223 | output = [] 224 | for char in text: 225 | cat = unicodedata.category(char) 226 | if cat == "Mn": 227 | continue 228 | output.append(char) 229 | return "".join(output) 230 | 231 | def _run_split_on_punc(self, text): 232 | """Splits punctuation on a piece of text.""" 233 | chars = list(text) 234 | i = 0 235 | start_new_word = True 236 | output = [] 237 | while i < len(chars): 238 | char = chars[i] 239 | if _is_punctuation(char): 240 | output.append([char]) 241 | start_new_word = True 242 | else: 243 | if start_new_word: 244 | output.append([]) 245 | start_new_word = False 246 | output[-1].append(char) 247 | i += 1 248 | 249 | return ["".join(x) for x in output] 250 | 251 | def _tokenize_chinese_chars(self, text): 252 | """Adds whitespace around any CJK character.""" 253 | output = [] 254 | for char in text: 255 | cp = ord(char) 256 | if self._is_chinese_char(cp): 257 | output.append(" ") 258 | output.append(char) 259 | output.append(" ") 260 | else: 261 | output.append(char) 262 | return "".join(output) 263 | 264 | def _is_chinese_char(self, cp): 265 | """Checks whether CP is the codepoint of a CJK character.""" 266 | # This defines a "chinese character" as anything in the CJK Unicode block: 267 | # https://en.wikipedia.org/wiki/CJK_Unified_Ideographs_(Unicode_block) 268 | # 269 | # Note that the CJK Unicode block is NOT all Japanese and Korean characters, 270 | # despite its name. The modern Korean Hangul alphabet is a different block, 271 | # as is Japanese Hiragana and Katakana. Those alphabets are used to write 272 | # space-separated words, so they are not treated specially and handled 273 | # like the all of the other languages. 274 | if ((cp >= 0x4E00 and cp <= 0x9FFF) or # 275 | (cp >= 0x3400 and cp <= 0x4DBF) or # 276 | (cp >= 0x20000 and cp <= 0x2A6DF) or # 277 | (cp >= 0x2A700 and cp <= 0x2B73F) or # 278 | (cp >= 0x2B740 and cp <= 0x2B81F) or # 279 | (cp >= 0x2B820 and cp <= 0x2CEAF) or 280 | (cp >= 0xF900 and cp <= 0xFAFF) or # 281 | (cp >= 0x2F800 and cp <= 0x2FA1F)): # 282 | return True 283 | 284 | return False 285 | 286 | def _clean_text(self, text): 287 | """Performs invalid character removal and whitespace cleanup on text.""" 288 | output = [] 289 | for char in text: 290 | cp = ord(char) 291 | if cp == 0 or cp == 0xfffd or _is_control(char): 292 | continue 293 | if _is_whitespace(char): 294 | output.append(" ") 295 | else: 296 | output.append(char) 297 | return "".join(output) 298 | 299 | 300 | class WordpieceTokenizer(object): 301 | """Runs WordPiece tokenziation.""" 302 | 303 | def __init__(self, vocab, unk_token="[UNK]", max_input_chars_per_word=200): 304 | self.vocab = vocab 305 | self.unk_token = unk_token 306 | self.max_input_chars_per_word = max_input_chars_per_word 307 | 308 | def tokenize(self, text): 309 | """Tokenizes a piece of text into its word pieces. 310 | 311 | This uses a greedy longest-match-first algorithm to perform tokenization 312 | using the given vocabulary. 313 | 314 | For example: 315 | input = "unaffable" 316 | output = ["un", "##aff", "##able"] 317 | 318 | Args: 319 | text: A single token or whitespace separated tokens. This should have 320 | already been passed through `BasicTokenizer. 321 | 322 | Returns: 323 | A list of wordpiece tokens. 324 | """ 325 | 326 | text = convert_to_unicode(text) 327 | 328 | output_tokens = [] 329 | for token in whitespace_tokenize(text): 330 | chars = list(token) 331 | if len(chars) > self.max_input_chars_per_word: 332 | output_tokens.append(self.unk_token) 333 | continue 334 | 335 | is_bad = False 336 | start = 0 337 | sub_tokens = [] 338 | while start < len(chars): 339 | end = len(chars) 340 | cur_substr = None 341 | while start < end: 342 | substr = "".join(chars[start:end]) 343 | if start > 0: 344 | substr = "##" + substr 345 | if substr in self.vocab: 346 | cur_substr = substr 347 | break 348 | end -= 1 349 | if cur_substr is None: 350 | is_bad = True 351 | break 352 | sub_tokens.append(cur_substr) 353 | start = end 354 | 355 | if is_bad: 356 | output_tokens.append(self.unk_token) 357 | else: 358 | output_tokens.extend(sub_tokens) 359 | return output_tokens 360 | 361 | 362 | def _is_whitespace(char): 363 | """Checks whether `chars` is a whitespace character.""" 364 | # \t, \n, and \r are technically contorl characters but we treat them 365 | # as whitespace since they are generally considered as such. 366 | if char == " " or char == "\t" or char == "\n" or char == "\r": 367 | return True 368 | cat = unicodedata.category(char) 369 | if cat == "Zs": 370 | return True 371 | return False 372 | 373 | 374 | def _is_control(char): 375 | """Checks whether `chars` is a control character.""" 376 | # These are technically control characters but we count them as whitespace 377 | # characters. 378 | if char == "\t" or char == "\n" or char == "\r": 379 | return False 380 | cat = unicodedata.category(char) 381 | if cat.startswith("C"): 382 | return True 383 | return False 384 | 385 | 386 | def _is_punctuation(char): 387 | """Checks whether `chars` is a punctuation character.""" 388 | cp = ord(char) 389 | # We treat all non-letter/number ASCII as punctuation. 390 | # Characters such as "^", "$", and "`" are not in the Unicode 391 | # Punctuation class but we treat them as punctuation anyways, for 392 | # consistency. 393 | if ((cp >= 33 and cp <= 47) or (cp >= 58 and cp <= 64) or 394 | (cp >= 91 and cp <= 96) or (cp >= 123 and cp <= 126)): 395 | return True 396 | cat = unicodedata.category(char) 397 | if cat.startswith("P"): 398 | return True 399 | return False 400 | -------------------------------------------------------------------------------- /train_eval.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | # Copyright 2018 The Google AI Language Team Authors. 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | """BERT finetuning runner.""" 16 | 17 | import os, csv, random, collections, pickle 18 | import modeling, optimization, tokenization 19 | from arguments import * 20 | 21 | 22 | class InputExample(object): 23 | """A single training/test example for simple sequence classification.""" 24 | 25 | def __init__(self, guid, text_a, text_b=None, label=None): 26 | """Constructs a InputExample. 27 | 28 | Args: 29 | guid: Unique id for the example. 30 | text_a: string. The untokenized text of the first sequence. For single 31 | sequence tasks, only this sequence must be specified. 32 | text_b: (Optional) string. The untokenized text of the second sequence. 33 | Only must be specified for sequence pair tasks. 34 | label: (Optional) string. The label of the example. This should be 35 | specified for train and dev examples, but not for test examples. 36 | """ 37 | self.guid = guid 38 | self.text_a = text_a 39 | self.text_b = text_b 40 | self.label = label 41 | 42 | 43 | class InputFeatures(object): 44 | """A single set of features of data.""" 45 | 46 | def __init__(self, 47 | input_ids, input_mask, segment_ids, label_id, is_real_example=True): 48 | self.input_ids = input_ids 49 | self.input_mask = input_mask 50 | self.segment_ids = segment_ids 51 | self.label_id = label_id 52 | self.is_real_example = is_real_example 53 | 54 | 55 | class DataProcessor(object): 56 | """Base class for data converters for sequence classification data sets.""" 57 | 58 | def get_train_examples(self, data_dir): 59 | """Gets a collection of `InputExample`s for the train set.""" 60 | raise NotImplementedError() 61 | 62 | def get_dev_examples(self, data_dir): 63 | """Gets a collection of `InputExample`s for the dev set.""" 64 | raise NotImplementedError() 65 | 66 | def get_test_examples(self, data_dir): 67 | """Gets a collection of `InputExample`s for prediction.""" 68 | raise NotImplementedError() 69 | 70 | def get_labels(self): 71 | """Gets the list of labels for this data set.""" 72 | raise NotImplementedError() 73 | 74 | @classmethod 75 | def _read_tsv(cls, input_file, quotechar=None): 76 | """Reads a tab separated value file.""" 77 | with tf.gfile.Open(input_file, "r") as f: 78 | reader = csv.reader(f, delimiter="\t", quotechar=quotechar) 79 | lines = [] 80 | for line in reader: 81 | lines.append(line) 82 | return lines 83 | 84 | 85 | class SelfProcessor(DataProcessor): 86 | """Processor for the FenLei data set (GLUE version).""" 87 | 88 | def get_train_examples(self, data_dir): 89 | file_path = os.path.join(data_dir, 'train.txt') # cnews.train.txt 90 | with open(file_path, 'r', encoding="utf-8") as f: 91 | reader = f.readlines() 92 | random.seed(0) 93 | random.shuffle(reader) # 注意要shuffle 94 | 95 | examples, self.labels = [], [] 96 | for index, line in enumerate(reader): 97 | guid = 'train-%d' % index 98 | split_line = line.strip().split("\t") 99 | text_a = tokenization.convert_to_unicode(split_line[1]) 100 | text_b = None 101 | label = split_line[0] 102 | examples.append(InputExample(guid=guid, text_a=text_a, 103 | text_b=text_b, label=label)) 104 | self.labels.append(label) 105 | return examples 106 | 107 | def get_dev_examples(self, data_dir): 108 | file_path = os.path.join(data_dir, 'val.txt') 109 | with open(file_path, 'r', encoding="utf-8") as f: 110 | reader = f.readlines() 111 | random.shuffle(reader) 112 | 113 | examples = [] 114 | for index, line in enumerate(reader): 115 | guid = 'dev-%d' % index 116 | split_line = line.strip().split("\t") 117 | text_a = tokenization.convert_to_unicode(split_line[1]) 118 | text_b = None 119 | label = split_line[0] 120 | examples.append(InputExample(guid=guid, text_a=text_a, 121 | text_b=text_b, label=label)) 122 | 123 | return examples 124 | 125 | def get_test_examples(self, data_dir): 126 | file_path = os.path.join(data_dir, 'test.txt') 127 | with open(file_path, 'r', encoding="utf-8") as f: 128 | reader = f.readlines() 129 | # random.shuffle(reader) # 测试集不打乱数据,便于比较 130 | 131 | examples = [] 132 | for index, line in enumerate(reader): 133 | guid = 'test-%d' % index 134 | split_line = line.strip().split("\t") 135 | text_a = tokenization.convert_to_unicode(split_line[1]) 136 | text_b = None 137 | label = split_line[0] 138 | examples.append(InputExample(guid=guid, text_a=text_a, 139 | text_b=text_b, label=label)) 140 | return examples 141 | 142 | def one_example(self, sentence): 143 | guid, label = 'pred-0', self.labels[0] 144 | text_a, text_b = sentence, None 145 | return InputExample(guid=guid, text_a=text_a, text_b=text_b, label=label) 146 | 147 | def get_labels(self): 148 | return sorted(set(self.labels), key=self.labels.index) # 使用有序列表而不是集合。保证了标签正确 149 | 150 | 151 | def convert_single_example(ex_index, example, label_list, max_seq_length, tokenizer): 152 | """Converts a single `InputExample` into a single `InputFeatures`.""" 153 | 154 | label_map = {} 155 | for (i, label) in enumerate(label_list): 156 | label_map[label] = i 157 | 158 | tokens_a = tokenizer.tokenize(example.text_a) 159 | tokens_b = None 160 | if example.text_b: 161 | tokens_b = tokenizer.tokenize(example.text_b) 162 | 163 | if tokens_b: 164 | # Modifies `tokens_a` and `tokens_b` in place so that the total 165 | # length is less than the specified length. 166 | # Account for [CLS], [SEP], [SEP] with "- 3" 167 | _truncate_seq_pair(tokens_a, tokens_b, max_seq_length - 3) 168 | else: 169 | # Account for [CLS] and [SEP] with "- 2" 170 | if len(tokens_a) > max_seq_length - 2: 171 | tokens_a = tokens_a[0:(max_seq_length - 2)] 172 | 173 | tokens = [] 174 | segment_ids = [] 175 | tokens.append("[CLS]") 176 | segment_ids.append(0) 177 | for token in tokens_a: 178 | tokens.append(token) 179 | segment_ids.append(0) 180 | tokens.append("[SEP]") 181 | segment_ids.append(0) 182 | 183 | if tokens_b: 184 | for token in tokens_b: 185 | tokens.append(token) 186 | segment_ids.append(1) 187 | tokens.append("[SEP]") 188 | segment_ids.append(1) 189 | 190 | input_ids = tokenizer.convert_tokens_to_ids(tokens) 191 | 192 | # The mask has 1 for real tokens and 0 for padding tokens. Only real 193 | # tokens are attended to. 194 | input_mask = [1] * len(input_ids) 195 | 196 | # Zero-pad up to the sequence length. 197 | while len(input_ids) < max_seq_length: 198 | input_ids.append(0) 199 | input_mask.append(0) 200 | segment_ids.append(0) 201 | 202 | assert len(input_ids) == max_seq_length 203 | assert len(input_mask) == max_seq_length 204 | assert len(segment_ids) == max_seq_length 205 | 206 | label_id = label_map[example.label] 207 | if ex_index < 5: 208 | tf.logging.info("*** Example ***") 209 | tf.logging.info("guid: %s" % (example.guid)) 210 | tf.logging.info("tokens: %s" % " ".join( 211 | [tokenization.printable_text(x) for x in tokens])) 212 | tf.logging.info("input_ids: %s" % " ".join([str(x) for x in input_ids])) 213 | tf.logging.info("input_mask: %s" % " ".join([str(x) for x in input_mask])) 214 | tf.logging.info("segment_ids: %s" % " ".join([str(x) for x in segment_ids])) 215 | tf.logging.info("label: %s (id = %d)" % (example.label, label_id)) 216 | 217 | feature = InputFeatures( 218 | input_ids=input_ids, input_mask=input_mask, 219 | segment_ids=segment_ids, label_id=label_id, 220 | is_real_example=True) 221 | return feature 222 | 223 | 224 | def file_based_convert_examples_to_features( 225 | examples, label_list, max_seq_length, tokenizer, output_file): 226 | """Convert a set of `InputExample`s to a TFRecord file.""" 227 | 228 | writer = tf.python_io.TFRecordWriter(output_file) 229 | 230 | for (ex_index, example) in enumerate(examples): 231 | if ex_index % 10000 == 0: 232 | tf.logging.info("Writing example %d of %d" % (ex_index, len(examples))) 233 | 234 | feature = convert_single_example(ex_index, example, label_list, 235 | max_seq_length, tokenizer) 236 | 237 | def create_int_feature(values): 238 | f = tf.train.Feature(int64_list=tf.train.Int64List(value=list(values))) 239 | return f 240 | 241 | features = collections.OrderedDict() 242 | features["input_ids"] = create_int_feature(feature.input_ids) 243 | features["input_mask"] = create_int_feature(feature.input_mask) 244 | features["segment_ids"] = create_int_feature(feature.segment_ids) 245 | features["label_ids"] = create_int_feature([feature.label_id]) 246 | features["is_real_example"] = create_int_feature( 247 | [int(feature.is_real_example)]) 248 | 249 | tf_example = tf.train.Example(features=tf.train.Features(feature=features)) 250 | writer.write(tf_example.SerializeToString()) 251 | writer.close() 252 | 253 | 254 | def file_based_input_fn_builder(input_file, seq_length, is_training, 255 | drop_remainder): 256 | """Creates an `input_fn` closure to be passed to TPUEstimator.""" 257 | 258 | name_to_features = { 259 | "input_ids": tf.FixedLenFeature([seq_length], tf.int64), 260 | "input_mask": tf.FixedLenFeature([seq_length], tf.int64), 261 | "segment_ids": tf.FixedLenFeature([seq_length], tf.int64), 262 | "label_ids": tf.FixedLenFeature([], tf.int64), 263 | "is_real_example": tf.FixedLenFeature([], tf.int64), 264 | } 265 | 266 | def _decode_record(record, name_to_features): 267 | """Decodes a record to a TensorFlow example.""" 268 | example = tf.parse_single_example(record, name_to_features) 269 | 270 | # tf.Example only supports tf.int64, but the TPU only supports tf.int32. 271 | # So cast all int64 to int32. 272 | for name in list(example.keys()): 273 | t = example[name] 274 | if t.dtype == tf.int64: 275 | t = tf.to_int32(t) 276 | example[name] = t 277 | 278 | return example 279 | 280 | def input_fn(params): 281 | """The actual input function.""" 282 | batch_size = arg_dic['train_batch_size'] # params["batch_size"] 283 | 284 | # For training, we want a lot of parallel reading and shuffling. 285 | # For eval, we want no shuffling and parallel reading doesn't matter. 286 | d = tf.data.TFRecordDataset(input_file) 287 | if is_training: 288 | d = d.repeat() 289 | d = d.shuffle(buffer_size=100) 290 | 291 | d = d.apply( 292 | tf.contrib.data.map_and_batch( 293 | lambda record: _decode_record(record, name_to_features), 294 | batch_size=batch_size, 295 | drop_remainder=drop_remainder)) 296 | return d 297 | 298 | return input_fn 299 | 300 | 301 | def _truncate_seq_pair(tokens_a, tokens_b, max_length): 302 | """Truncates a sequence pair in place to the maximum length.""" 303 | 304 | # This is a simple heuristic which will always truncate the longer sequence 305 | # one token at a time. This makes more sense than truncating an equal percent 306 | # of tokens from each, since if one sequence is very short then each token 307 | # that's truncated likely contains more information than a longer sequence. 308 | while True: 309 | total_length = len(tokens_a) + len(tokens_b) 310 | if total_length <= max_length: 311 | break 312 | if len(tokens_a) > len(tokens_b): 313 | tokens_a.pop() 314 | else: 315 | tokens_b.pop() 316 | 317 | 318 | def create_model(bert_config, is_training, input_ids, input_mask, segment_ids, 319 | labels, num_labels): 320 | """Creates a classification model.""" 321 | model = modeling.BertModel( 322 | config=bert_config, is_training=is_training, 323 | input_ids=input_ids, input_mask=input_mask, 324 | token_type_ids=segment_ids, use_one_hot_embeddings=False) 325 | 326 | # In the demo, we are doing a simple classification task on the entire segment. 327 | # 328 | # If you want to use the token-level output, use model.get_sequence_output() instead. 329 | embedding_layer = model.get_sequence_output() 330 | output_layer = model.get_pooled_output() 331 | 332 | hidden_size = output_layer.shape[-1].value 333 | 334 | output_weights = tf.get_variable( 335 | "output_weights", [num_labels, hidden_size], 336 | initializer=tf.truncated_normal_initializer(stddev=0.02)) 337 | 338 | output_bias = tf.get_variable( 339 | "output_bias", [num_labels], initializer=tf.zeros_initializer()) 340 | 341 | with tf.variable_scope("loss"): 342 | if is_training: 343 | # I.e., 0.1 dropout 344 | output_layer = tf.nn.dropout(output_layer, keep_prob=0.9) 345 | 346 | logits = tf.matmul(output_layer, output_weights, transpose_b=True) 347 | logits = tf.nn.bias_add(logits, output_bias) 348 | probabilities = tf.nn.softmax(logits, axis=-1) 349 | log_probs = tf.nn.log_softmax(logits, axis=-1) 350 | 351 | one_hot_labels = tf.one_hot(labels, depth=num_labels, dtype=tf.float32) 352 | 353 | per_example_loss = -tf.reduce_sum(one_hot_labels * log_probs, axis=-1) 354 | loss = tf.reduce_mean(per_example_loss) 355 | 356 | return (loss, per_example_loss, logits, probabilities) 357 | 358 | 359 | def model_fn_builder(bert_config, num_labels, init_checkpoint, learning_rate, 360 | num_train, num_warmup, ): 361 | """Returns `model_fn` closure for GPU Estimator.""" 362 | 363 | def model_gpu(features, labels, mode, params): # pylint: disable=unused-argument 364 | """The `model_fn` for GPU 版本的 Estimator.""" 365 | 366 | tf.logging.info("*** Features ***") 367 | for name in sorted(features.keys()): 368 | tf.logging.info(" name = %s, shape = %s" % (name, features[name].shape)) 369 | 370 | input_ids = features["input_ids"] 371 | input_mask = features["input_mask"] 372 | segment_ids = features["segment_ids"] 373 | label_ids = features["label_ids"] 374 | is_training = (mode == tf.estimator.ModeKeys.TRAIN) 375 | 376 | (total_loss, per_example_loss, logits, probabilities) = create_model( 377 | bert_config, is_training, input_ids, input_mask, segment_ids, label_ids, num_labels) 378 | 379 | tvars = tf.trainable_variables() 380 | initialized_variable_names = {} 381 | 382 | if init_checkpoint: 383 | (assignment_map, initialized_variable_names 384 | ) = modeling.get_assignment_map_from_checkpoint(tvars, init_checkpoint) 385 | tf.train.init_from_checkpoint(init_checkpoint, assignment_map) 386 | 387 | tf.logging.info("**** Trainable Variables ****") 388 | for var in tvars: 389 | init_string = "" 390 | if var.name in initialized_variable_names: 391 | init_string = ", *INIT_FROM_CKPT*" 392 | tf.logging.info(" name = %s, shape = %s%s", var.name, var.shape, init_string) 393 | 394 | if mode == tf.estimator.ModeKeys.TRAIN: 395 | train_op = optimization.create_optimizer(total_loss, learning_rate, num_train, num_warmup, False) 396 | output_spec = tf.estimator.EstimatorSpec(mode=mode, loss=total_loss, train_op=train_op, ) 397 | elif mode == tf.estimator.ModeKeys.EVAL: 398 | def metric_fn(per_example_loss, label_ids, logits, is_real_example): 399 | predictions = tf.argmax(logits, axis=-1, output_type=tf.int32) 400 | accuracy = tf.metrics.accuracy( 401 | labels=label_ids, predictions=predictions, weights=is_real_example) 402 | loss = tf.metrics.mean(values=per_example_loss, weights=is_real_example) 403 | return {"eval_accuracy": accuracy, "eval_loss": loss, } 404 | 405 | metrics = metric_fn(per_example_loss, label_ids, logits, True) 406 | output_spec = tf.estimator.EstimatorSpec(mode=mode, loss=total_loss, eval_metric_ops=metrics) 407 | else: 408 | output_spec = tf.estimator.EstimatorSpec(mode=mode, predictions={"probabilities": probabilities}, ) 409 | return output_spec 410 | 411 | return model_gpu 412 | 413 | 414 | # This function is not used by this file but is still used by the Colab and people who depend on it. 415 | def input_fn_builder(features, seq_length, is_training, drop_remainder): 416 | """Creates an `input_fn` closure to be passed to TPUEstimator.""" 417 | 418 | all_input_ids = [] 419 | all_input_mask = [] 420 | all_segment_ids = [] 421 | all_label_ids = [] 422 | 423 | for feature in features: 424 | all_input_ids.append(feature.input_ids) 425 | all_input_mask.append(feature.input_mask) 426 | all_segment_ids.append(feature.segment_ids) 427 | all_label_ids.append(feature.label_id) 428 | 429 | def input_fn(params): 430 | """The actual input function.""" 431 | batch_size = 200 # params["batch_size"] 432 | 433 | num_examples = len(features) 434 | 435 | # This is for demo purposes and does NOT scale to large data sets. We do 436 | # not use Dataset.from_generator() because that uses tf.py_func which is 437 | # not TPU compatible. The right way to load data is with TFRecordReader. 438 | d = tf.data.Dataset.from_tensor_slices({ 439 | "input_ids": 440 | tf.constant(all_input_ids, shape=[num_examples, seq_length], 441 | dtype=tf.int32), 442 | "input_mask": 443 | tf.constant(all_input_mask, shape=[num_examples, seq_length], 444 | dtype=tf.int32), 445 | "segment_ids": 446 | tf.constant(all_segment_ids, shape=[num_examples, seq_length], 447 | dtype=tf.int32), 448 | "label_ids": 449 | tf.constant(all_label_ids, shape=[num_examples], dtype=tf.int32), 450 | }) 451 | 452 | if is_training: 453 | d = d.repeat() 454 | d = d.shuffle(buffer_size=100) 455 | 456 | d = d.batch(batch_size=batch_size, drop_remainder=drop_remainder) 457 | return d 458 | 459 | return input_fn 460 | 461 | 462 | def create_classification_model(bert_config, is_training, input_ids, input_mask, segment_ids, labels, num_labels): 463 | # 通过传入的训练数据,进行representation 464 | model = modeling.BertModel( 465 | config=bert_config, 466 | is_training=is_training, 467 | input_ids=input_ids, 468 | input_mask=input_mask, 469 | token_type_ids=segment_ids, 470 | ) 471 | 472 | embedding_layer = model.get_sequence_output() 473 | output_layer = model.get_pooled_output() 474 | hidden_size = output_layer.shape[-1].value 475 | 476 | output_weights = tf.get_variable( 477 | "output_weights", [num_labels, hidden_size], 478 | initializer=tf.truncated_normal_initializer(stddev=0.02)) 479 | 480 | output_bias = tf.get_variable( 481 | "output_bias", [num_labels], initializer=tf.zeros_initializer()) 482 | 483 | with tf.variable_scope("loss"): 484 | if is_training: 485 | # I.e., 0.1 dropout 486 | output_layer = tf.nn.dropout(output_layer, keep_prob=0.9) 487 | 488 | logits = tf.matmul(output_layer, output_weights, transpose_b=True) 489 | logits = tf.nn.bias_add(logits, output_bias) 490 | probabilities = tf.nn.softmax(logits, axis=-1) 491 | log_probs = tf.nn.log_softmax(logits, axis=-1) 492 | 493 | if labels is not None: 494 | one_hot_labels = tf.one_hot(labels, depth=num_labels, dtype=tf.float32) 495 | 496 | per_example_loss = -tf.reduce_sum(one_hot_labels * log_probs, axis=-1) 497 | loss = tf.reduce_mean(per_example_loss) 498 | else: 499 | loss, per_example_loss = None, None 500 | return (loss, per_example_loss, logits, probabilities) 501 | 502 | 503 | def save_PBmodel( num_labels): 504 | """ 保存PB格式中文分类模型 """ 505 | try: 506 | # 如果PB文件已经存在,则返回PB文件的路径,否则将模型转化为PB文件,并且返回存储PB文件的路径 507 | pb_file = os.path.join(arg_dic['pb_model_dir'], 'classification_model.pb') 508 | graph = tf.Graph() 509 | with graph.as_default(): 510 | input_ids = tf.placeholder(tf.int32, (None, arg_dic['max_seq_length']), 'input_ids') 511 | input_mask = tf.placeholder(tf.int32, (None, arg_dic['max_seq_length']), 'input_mask') 512 | bert_config = modeling.BertConfig.from_json_file(arg_dic['bert_config_file']) 513 | loss, per_example_loss, logits, probabilities = create_classification_model( 514 | bert_config=bert_config, is_training=False, 515 | input_ids=input_ids, input_mask=input_mask, segment_ids=None, labels=None, num_labels=num_labels) 516 | 517 | probabilities = tf.identity(probabilities, 'pred_prob') 518 | saver = tf.train.Saver() 519 | 520 | with tf.Session() as sess: 521 | sess.run(tf.global_variables_initializer()) 522 | latest_checkpoint = tf.train.latest_checkpoint(arg_dic['output_dir']) 523 | saver.restore(sess, latest_checkpoint) 524 | from tensorflow.python.framework import graph_util 525 | tmp_g = graph_util.convert_variables_to_constants(sess, graph.as_graph_def(), ['pred_prob']) 526 | 527 | # 存储二进制模型到文件中 528 | with tf.gfile.GFile(pb_file, 'wb') as f: 529 | f.write(tmp_g.SerializeToString()) 530 | return pb_file 531 | except Exception as e: 532 | print('fail to optimize the graph! %s', e) 533 | 534 | 535 | def main(): 536 | tf.logging.set_verbosity(tf.logging.INFO) 537 | 538 | processors = {"cnews": SelfProcessor} 539 | 540 | tokenization.validate_case_matches_checkpoint(arg_dic['do_lower_case'], arg_dic['init_checkpoint']) 541 | 542 | if not arg_dic['do_train'] and not arg_dic['do_eval'] and not arg_dic['do_predict']: 543 | raise ValueError( 544 | "At least one of `do_train`, `do_eval` or `do_predict' must be True.") 545 | 546 | bert_config = modeling.BertConfig.from_json_file(arg_dic['bert_config_file']) 547 | 548 | if arg_dic['max_seq_length'] > bert_config.max_position_embeddings: 549 | raise ValueError( 550 | "Cannot use sequence length %d because the BERT model " 551 | "was only trained up to sequence length %d" % 552 | (arg_dic['max_seq_length'], bert_config.max_position_embeddings)) 553 | 554 | tf.gfile.MakeDirs(arg_dic['output_dir']) 555 | tf.gfile.MakeDirs(arg_dic['pb_model_dir']) 556 | task_name = arg_dic['task_name'].lower() 557 | if task_name not in processors: 558 | raise ValueError("Task not found: %s" % (task_name)) 559 | 560 | tokenizer = tokenization.FullTokenizer(vocab_file=arg_dic['vocab_file'], do_lower_case=arg_dic['do_lower_case']) 561 | tpu_cluster_resolver = None 562 | run_config = tf.estimator.RunConfig(model_dir=arg_dic['output_dir'], 563 | save_checkpoints_steps=arg_dic['save_checkpoints_steps'], ) 564 | 565 | processor = processors[task_name]() 566 | train_examples = processor.get_train_examples(arg_dic['data_dir']) 567 | global label_list 568 | label_list = processor.get_labels() 569 | label_map = {} 570 | for (i, label) in enumerate(label_list): 571 | label_map[label] = i 572 | with open(arg_dic['pb_model_dir'] + 'label_list.pkl', 'wb') as f: 573 | pickle.dump(label_list, f) 574 | with open(arg_dic['pb_model_dir'] + 'label2id.pkl', 'wb') as f: 575 | pickle.dump(label_map, f) 576 | num_train_steps = int( 577 | len(train_examples) / arg_dic['train_batch_size'] * arg_dic['num_train_epochs']) if arg_dic[ 578 | 'do_train'] else None 579 | num_warmup_steps = int(num_train_steps * arg_dic['warmup_proportion']) if arg_dic['do_train'] else None 580 | 581 | model_fn = model_fn_builder(bert_config=bert_config, num_labels=len(label_list), 582 | init_checkpoint=arg_dic['init_checkpoint'], learning_rate=arg_dic['learning_rate'], 583 | num_train=num_train_steps, num_warmup=num_warmup_steps) 584 | 585 | estimator = tf.estimator.Estimator(model_fn=model_fn, config=run_config, ) 586 | 587 | if arg_dic['do_train']: 588 | train_file = os.path.join(arg_dic['output_dir'], "train.tf_record") 589 | file_based_convert_examples_to_features( 590 | train_examples, label_list, arg_dic['max_seq_length'], tokenizer, train_file) 591 | tf.logging.info("***** Running training *****") 592 | tf.logging.info(" Num examples = %d", len(train_examples)) 593 | tf.logging.info(" Batch size = %d", arg_dic['train_batch_size']) 594 | tf.logging.info(" Num steps = %d", num_train_steps) 595 | train_input_fn = file_based_input_fn_builder( 596 | input_file=train_file, seq_length=arg_dic['max_seq_length'], 597 | is_training=True, drop_remainder=True) 598 | estimator.train(input_fn=train_input_fn, max_steps=num_train_steps) 599 | 600 | if arg_dic['do_eval']: 601 | eval_examples = processor.get_dev_examples(arg_dic['data_dir']) 602 | 603 | num_actual_eval_examples = len(eval_examples) 604 | 605 | eval_file = os.path.join(arg_dic['output_dir'], "eval.tf_record") 606 | file_based_convert_examples_to_features( 607 | eval_examples, label_list, arg_dic['max_seq_length'], tokenizer, eval_file) 608 | 609 | tf.logging.info("***** Running evaluation *****") 610 | tf.logging.info(" Num examples = %d (%d actual, %d padding)", 611 | len(eval_examples), num_actual_eval_examples, 612 | len(eval_examples) - num_actual_eval_examples) 613 | tf.logging.info(" Batch size = %d", arg_dic['eval_batch_size']) 614 | 615 | eval_input_fn = file_based_input_fn_builder( 616 | input_file=eval_file, seq_length=arg_dic['max_seq_length'], 617 | is_training=False, drop_remainder=False) 618 | 619 | result = estimator.evaluate(input_fn=eval_input_fn, ) 620 | 621 | output_eval_file = os.path.join(arg_dic['output_dir'], "eval_results.txt") 622 | with tf.gfile.GFile(output_eval_file, "w") as writer: 623 | tf.logging.info("***** Eval results *****") 624 | for key in sorted(result.keys()): 625 | tf.logging.info(" %s = %s", key, str(result[key])) 626 | writer.write("%s = %s\n" % (key, str(result[key]))) 627 | 628 | if arg_dic['do_predict']: 629 | predict_examples = processor.get_test_examples(arg_dic['data_dir']) # 待预测的样本们 630 | 631 | num_actual_predict_examples = len(predict_examples) 632 | 633 | predict_file = os.path.join(arg_dic['output_dir'], "predict.tf_record") 634 | file_based_convert_examples_to_features(predict_examples, label_list, 635 | arg_dic['max_seq_length'], tokenizer, predict_file) 636 | 637 | tf.logging.info("***** Running prediction*****") 638 | tf.logging.info(" Num examples = %d (%d actual, %d padding)", 639 | len(predict_examples), num_actual_predict_examples, 640 | len(predict_examples) - num_actual_predict_examples) 641 | tf.logging.info(" Batch size = %d", arg_dic['predict_batch_size']) 642 | 643 | predict_input_fn = file_based_input_fn_builder( 644 | input_file=predict_file, seq_length=arg_dic['max_seq_length'], 645 | is_training=False, drop_remainder=False) 646 | 647 | result = estimator.predict(input_fn=predict_input_fn) # 执行预测操作,得到结果 648 | 649 | output_predict_file = os.path.join(arg_dic['output_dir'], "test_results.tsv") 650 | with tf.gfile.GFile(output_predict_file, "w") as writer: 651 | 652 | tf.logging.info("***** Predict results *****") 653 | for sam, prediction in zip(predict_examples, result): 654 | probabilities = prediction["probabilities"] 655 | gailv = probabilities.tolist() # 先转换成Python列表 656 | pos = gailv.index(max(gailv)) # 定位到最大概率值索引, 657 | # 找到预测出的类别名,写入到输出文件 658 | writer.write('{}\t{}\t{}\n'.format(sam.label, sam.text_a, label_list[pos])) 659 | 660 | save_PBmodel(len(label_list)) # 生成单个pb模型。 661 | 662 | 663 | if __name__ == "__main__": 664 | main() 665 | --------------------------------------------------------------------------------