@@ -14,3 +14,5 @@ caches | |||||
.fitlog | .fitlog | ||||
logs/ | logs/ | ||||
.fitconfig | .fitconfig | ||||
docs/build |
@@ -2,6 +2,6 @@ fastNLP.io.loader | |||||
================= | ================= | ||||
.. automodule:: fastNLP.io.loader | .. automodule:: fastNLP.io.loader | ||||
:members: Loader, YelpLoader, YelpFullLoader, YelpPolarityLoader, IMDBLoader, SSTLoader, SST2Loader, ChnSentiCorpLoader, ConllLoader, Conll2003Loader, Conll2003NERLoader, OntoNotesNERLoader, CTBLoader, MsraNERLoader, PeopleDailyNERLoader, WeiboNERLoader, CSVLoader, JsonLoader, CWSLoader, MNLILoader, QuoraLoader, SNLILoader, QNLILoader, RTELoader | |||||
:members: Loader, YelpLoader, YelpFullLoader, YelpPolarityLoader, IMDBLoader, SSTLoader, SST2Loader, ChnSentiCorpLoader, ConllLoader, Conll2003Loader, Conll2003NERLoader, OntoNotesNERLoader, CTBLoader, MsraNERLoader, PeopleDailyNERLoader, WeiboNERLoader, CSVLoader, JsonLoader, CWSLoader, MNLILoader, QuoraLoader, SNLILoader, QNLILoader, RTELoader, CoReferenceLoader | |||||
:inherited-members: | :inherited-members: | ||||
@@ -2,6 +2,6 @@ fastNLP.io.pipe | |||||
=============== | =============== | ||||
.. automodule:: fastNLP.io.pipe | .. automodule:: fastNLP.io.pipe | ||||
:members: Pipe, CWSPipe, YelpFullPipe, YelpPolarityPipe, SSTPipe, SST2Pipe, IMDBPipe, ChnSentiCorpPipe, Conll2003NERPipe, OntoNotesNERPipe, MsraNERPipe, WeiboNERPipe, PeopleDailyPipe, Conll2003Pipe, MatchingBertPipe, RTEBertPipe, SNLIBertPipe, QuoraBertPipe, QNLIBertPipe, MNLIBertPipe, MatchingPipe, RTEPipe, SNLIPipe, QuoraPipe, QNLIPipe, MNLIPipe | |||||
:members: Pipe, CWSPipe, YelpFullPipe, YelpPolarityPipe, SSTPipe, SST2Pipe, IMDBPipe, ChnSentiCorpPipe, Conll2003NERPipe, OntoNotesNERPipe, MsraNERPipe, WeiboNERPipe, PeopleDailyPipe, Conll2003Pipe, MatchingBertPipe, RTEBertPipe, SNLIBertPipe, QuoraBertPipe, QNLIBertPipe, MNLIBertPipe, MatchingPipe, RTEPipe, SNLIPipe, QuoraPipe, QNLIPipe, MNLIPipe, CoReferencePipe | |||||
:inherited-members: | :inherited-members: | ||||
@@ -2,5 +2,5 @@ fastNLP.modules.encoder | |||||
======================= | ======================= | ||||
.. automodule:: fastNLP.modules.encoder | .. automodule:: fastNLP.modules.encoder | ||||
:members: ConvolutionCharEncoder, LSTMCharEncoder, ConvMaxpool, LSTM, StarTransformer, TransformerEncoder, VarRNN, VarLSTM, VarGRU, MaxPool, MaxPoolWithMask, AvgPool, AvgPoolWithMask, MultiHeadAttention | |||||
:members: ConvolutionCharEncoder, LSTMCharEncoder, ConvMaxpool, LSTM, StarTransformer, TransformerEncoder, VarRNN, VarLSTM, VarGRU, MaxPool, MaxPoolWithMask, AvgPool, AvgPoolWithMask, MultiHeadAttention, BiAttention, SelfAttention | |||||
@@ -2,7 +2,7 @@ fastNLP | |||||
======= | ======= | ||||
.. automodule:: fastNLP | .. automodule:: fastNLP | ||||
:members: Instance, FieldArray, DataSetIter, BatchIter, TorchLoaderIter, Vocabulary, DataSet, Const, Trainer, Tester, Callback, GradientClipCallback, EarlyStopCallback, TensorboardCallback, LRScheduler, ControlC, LRFinder, Padder, AutoPadder, EngChar2DPadder, AccuracyMetric, SpanFPreRecMetric, ExtractiveQAMetric, Optimizer, SGD, Adam, AdamW, Sampler, SequentialSampler, BucketSampler, RandomSampler, LossFunc, CrossEntropyLoss, L1Loss, BCELoss, NLLLoss, LossInForward, cache_results, logger | |||||
:members: Instance, FieldArray, DataSetIter, BatchIter, TorchLoaderIter, Vocabulary, DataSet, Const, Trainer, Tester, Callback, GradientClipCallback, EarlyStopCallback, FitlogCallback, EvaluateCallback, LRScheduler, ControlC, LRFinder, TensorboardCallback, WarmupCallback, SaveModelCallback, EchoCallback, TesterCallback, CallbackException, EarlyStopError, Padder, AutoPadder, EngChar2DPadder, AccuracyMetric, SpanFPreRecMetric, ExtractiveQAMetric, Optimizer, SGD, Adam, AdamW, Sampler, SequentialSampler, BucketSampler, RandomSampler, LossFunc, CrossEntropyLoss, L1Loss, BCELoss, NLLLoss, LossInForward, cache_results, logger | |||||
:inherited-members: | :inherited-members: | ||||
子模块 | 子模块 | ||||
@@ -7,7 +7,9 @@ __all__ = [ | |||||
"IMDBLoader", | "IMDBLoader", | ||||
"SSTLoader", | "SSTLoader", | ||||
"SST2Loader", | "SST2Loader", | ||||
"ChnSentiCorpLoader" | |||||
"ChnSentiCorpLoader", | |||||
"THUCNewsLoader", | |||||
"WeiboSenti100kLoader" | |||||
] | ] | ||||
import glob | import glob | ||||
@@ -396,3 +398,123 @@ class ChnSentiCorpLoader(Loader): | |||||
""" | """ | ||||
output_dir = self._get_dataset_path('chn-senti-corp') | output_dir = self._get_dataset_path('chn-senti-corp') | ||||
return output_dir | return output_dir | ||||
class ChnSentiCorpLoader(Loader): | |||||
""" | |||||
支持读取的数据的格式为,第一行为标题(具体内容会被忽略),之后一行为一个sample,第一个制表符之前被认为是label,第 | |||||
一个制表符及之后认为是句子 | |||||
Example:: | |||||
label raw_chars | |||||
1 這間酒店環境和服務態度亦算不錯,但房間空間太小~~ | |||||
1 <荐书> 推荐所有喜欢<红楼>的红迷们一定要收藏这本书,要知道... | |||||
0 商品的不足暂时还没发现,京东的订单处理速度实在.......周二就打包完成,周五才发货... | |||||
读取后的DataSet具有以下的field | |||||
.. csv-table:: | |||||
:header: "raw_chars", "target" | |||||
"這間酒店環境和服務態度亦算不錯,但房間空間太小~~", "1" | |||||
"<荐书> 推荐所有喜欢<红楼>...", "1" | |||||
"..." | |||||
""" | |||||
def __init__(self): | |||||
super().__init__() | |||||
def _load(self, path: str): | |||||
""" | |||||
从path中读取数据 | |||||
:param path: | |||||
:return: | |||||
""" | |||||
ds = DataSet() | |||||
with open(path, 'r', encoding='utf-8') as f: | |||||
f.readline() | |||||
for line in f: | |||||
line = line.strip() | |||||
tab_index = line.index('\t') | |||||
if tab_index != -1: | |||||
target = line[:tab_index] | |||||
raw_chars = line[tab_index + 1:] | |||||
if raw_chars: | |||||
ds.append(Instance(raw_chars=raw_chars, target=target)) | |||||
return ds | |||||
def download(self) -> str: | |||||
""" | |||||
自动下载数据,该数据取自https://github.com/pengming617/bert_classification/tree/master/data,在 | |||||
https://arxiv.org/pdf/1904.09223.pdf与https://arxiv.org/pdf/1906.08101.pdf有使用 | |||||
:return: | |||||
""" | |||||
output_dir = self._get_dataset_path('chn-senti-corp') | |||||
return output_dir | |||||
class THUCNewsLoader(Loader): | |||||
""" | |||||
别名: | |||||
数据集简介:document-level分类任务,新闻10分类 | |||||
原始数据内容为:每行一个sample,第一个'\t'之前为target,第一个'\t'之后为raw_words | |||||
读取后的Dataset将具有以下数据结构: | |||||
.. csv-table:: | |||||
:header: "raw_words", "target" | |||||
"马晓旭意外受伤让国奥警惕 无奈大雨格外青睐殷家军记者傅亚雨沈阳报道 ... ", "体育" | |||||
"...", "..." | |||||
""" | |||||
def __init__(self): | |||||
super(THUCNewsLoader, self).__init__() | |||||
def _load(self, path: str = None): | |||||
ds = DataSet() | |||||
with open(path, 'r', encoding='utf-8') as f: | |||||
for line in f: | |||||
line = line.strip() | |||||
sep_index = line.index('\t') | |||||
raw_chars = line[sep_index + 1:] | |||||
target = line[:sep_index] | |||||
if raw_chars: | |||||
ds.append(Instance(raw_chars=raw_chars, target=target)) | |||||
return ds | |||||
class WeiboSenti100kLoader(Loader): | |||||
""" | |||||
别名: | |||||
数据集简介:微博sentiment classification,二分类 | |||||
原始数据内容为: | |||||
label text | |||||
0 六一出生的?好讽刺…… //@祭春姬:他爸爸是外星人吧 //@面孔小高:现在的孩子都怎么了 [怒][怒][怒] | |||||
1 听过一场!笑死了昂,一听茄子脱口秀,从此节操是路人![嘻嘻] //@中国梦网官微:@Pencil彭赛 @茄子脱口秀 [圣诞帽][圣诞树][平安果] | |||||
读取后的Dataset将具有以下数据结构: | |||||
.. csv-table:: | |||||
:header: "raw_chars", "target" | |||||
"六一出生的?好讽刺…… //@祭春姬:他爸爸是外星人吧 //@面孔小高:现在的孩子都怎么了 [怒][怒][怒]", "0" | |||||
"...", "..." | |||||
""" | |||||
def __init__(self): | |||||
super(WeiboSenti100kLoader, self).__init__() | |||||
def _load(self, path: str = None): | |||||
ds = DataSet() | |||||
with open(path, 'r', encoding='utf-8') as f: | |||||
next(f) | |||||
for line in f: | |||||
line = line.strip() | |||||
target = line[0] | |||||
raw_chars = line[1:] | |||||
if raw_chars: | |||||
ds.append(Instance(raw_chars=raw_chars, target=target)) | |||||
return ds |
@@ -6,6 +6,9 @@ __all__ = [ | |||||
"QNLILoader", | "QNLILoader", | ||||
"RTELoader", | "RTELoader", | ||||
"QuoraLoader", | "QuoraLoader", | ||||
"BQCorpusLoader", | |||||
"XNLILoader", | |||||
"LCQMCLoader" | |||||
] | ] | ||||
import os | import os | ||||
@@ -18,6 +21,8 @@ from .. import DataBundle | |||||
from ...core.const import Const | from ...core.const import Const | ||||
from ...core.dataset import DataSet | from ...core.dataset import DataSet | ||||
from ...core.instance import Instance | from ...core.instance import Instance | ||||
from .csv import CSVLoader | |||||
from ..utils import check_loader_paths | |||||
class MNLILoader(Loader): | class MNLILoader(Loader): | ||||
@@ -317,3 +322,145 @@ class QuoraLoader(Loader): | |||||
def download(self): | def download(self): | ||||
raise RuntimeError("Quora cannot be downloaded automatically.") | raise RuntimeError("Quora cannot be downloaded automatically.") | ||||
class XNLILoader(Loader): | |||||
""" | |||||
别名: | |||||
数据集简介:中文句对NLI(本为multi-lingual的数据集,但是这里只取了中文的数据集)。原句子已被MOSES tokenizer处理 | |||||
原始数据为: | |||||
train中的数据包括premise,hypo和label三个field | |||||
dev和test中的数据为csv或json格式,包括十多个field,这里只取与以上三个field中的数据 | |||||
读取后的Dataset将具有以下数据结构: | |||||
.. csv-table:: | |||||
:header: "raw_chars1", "raw_chars2", "target" | |||||
"从概念上看,奶油收入有两个基本方面产品和地理.", "产品和地理是什么使奶油抹霜工作.", "1" | |||||
""...", "...", "..." | |||||
""" | |||||
def __init__(self): | |||||
super(XNLILoader, self).__init__() | |||||
def _load(self, path: str = None): | |||||
csv_loader = CSVLoader(sep='\t') | |||||
ds_all = csv_loader._load(path) | |||||
ds_zh = DataSet() | |||||
for i in ds_all: | |||||
if i['language'] == 'zh': | |||||
ds_zh.append(Instance(raw_chars1=i['sentence1'], raw_chars2=i['sentence2'], target=i['gold_label'])) | |||||
return ds_zh | |||||
def _load_train(self, path: str = None): | |||||
csv_loader = CSVLoader(sep='\t') | |||||
ds = csv_loader._load(path) | |||||
ds.rename_field('label', 'target') | |||||
ds.rename_field('premise', 'raw_chars1') | |||||
ds.rename_field('hypo', 'raw_chars2') | |||||
ds.apply(lambda i: "".join(i['raw_chars1'].split()), new_field_name='raw_chars1') | |||||
ds.apply(lambda i: "".join(i['raw_chars2'].split()), new_field_name='raw_chars2') | |||||
return ds | |||||
def load(self, paths: Union[str, Dict[str, str]] = None) -> DataBundle: | |||||
if paths is None: | |||||
paths = self.download() | |||||
paths = check_loader_paths(paths) | |||||
datasets = {} | |||||
for name, path in paths.items(): | |||||
if name == 'train': | |||||
datasets[name] = self._load_train(path) | |||||
else: | |||||
datasets[name] = self._load(path) | |||||
data_bundle = DataBundle(datasets=datasets) | |||||
return data_bundle | |||||
class BQCorpusLoader(Loader): | |||||
""" | |||||
别名: | |||||
数据集简介:句子对二分类任务(判断是否具有相同的语义) | |||||
原始数据内容为: | |||||
每行一个sample,第一个','之前为text1,第二个','之前为text2,第二个','之后为target | |||||
第一行为sentence1 sentence2 label | |||||
读取后的Dataset将具有以下数据结构: | |||||
.. csv-table:: | |||||
:header: "raw_chars1", "raw_chars2", "target" | |||||
"不是邀请的如何贷款?", "我不是你们邀请的客人可以贷款吗?", "1" | |||||
"如何满足微粒银行的审核", "建设银行有微粒贷的资格吗", "0" | |||||
"...", "...", "..." | |||||
""" | |||||
def __init__(self): | |||||
super(BQCorpusLoader, self).__init__() | |||||
def _load(self, path: str = None): | |||||
ds = DataSet() | |||||
with open(path, 'r', encoding='utf-8') as f: | |||||
next(f) | |||||
for line in f: | |||||
line = line.strip() | |||||
target = line[-1] | |||||
sep_index = line.index(',') | |||||
raw_chars1 = line[:sep_index] | |||||
raw_chars2 = line[sep_index + 1:] | |||||
if raw_chars1: | |||||
ds.append(Instance(raw_chars1=raw_chars1, raw_chars2=raw_chars2, target=target)) | |||||
return ds | |||||
class LCQMCLoader(Loader): | |||||
""" | |||||
别名: | |||||
数据集简介:句对匹配(question matching) | |||||
原始数据为: | |||||
'喜欢打篮球的男生喜欢什么样的女生\t爱打篮球的男生喜欢什么样的女生\t1\n' | |||||
'晚上睡觉带着耳机听音乐有什么害处吗?\t孕妇可以戴耳机听音乐吗?\t0\n' | |||||
读取后的Dataset将具有以下的数据结构: | |||||
.. csv-table:: | |||||
:header: "raw_chars1", "raw_chars2", "target" | |||||
"喜欢打篮球的男生喜欢什么样的女生?", "爱打篮球的男生喜欢什么样的女生?", "1" | |||||
"晚上睡觉带着耳机听音乐有什么害处吗?", "妇可以戴耳机听音乐吗?", "0" | |||||
""...", "...", "..." | |||||
""" | |||||
def __init__(self): | |||||
super(LCQMCLoader, self).__init__() | |||||
def _load(self, path: str = None): | |||||
ds = DataSet() | |||||
with open(path, 'r', encoding='utf-8') as f: | |||||
for line in f: | |||||
line = line.strip() | |||||
line_segments = line.split('\t') | |||||
assert len(line_segments) == 3 | |||||
target = line_segments[-1] | |||||
raw_chars1 = line_segments[0] | |||||
raw_chars2 = line_segments[1] | |||||
if raw_chars1: | |||||
ds.append(Instance(raw_chars1=raw_chars1, raw_chars2=raw_chars2, target=target)) | |||||
return ds | |||||
''' | |||||
def download(self)->str: | |||||
""" | |||||
自动下载数据,该数据取自论文 LCQMC: A Large-scale Chinese Question Matching Corpus. | |||||
InProceedings of the 27thInternational Conference on Computational Linguistics. 1952–1962. | |||||
:return: | |||||
""" | |||||
output_dir = self._get_dataset_path('chn-senti-corp') | |||||
return output_dir | |||||
''' | |||||
@@ -6,7 +6,9 @@ __all__ = [ | |||||
"SSTPipe", | "SSTPipe", | ||||
"SST2Pipe", | "SST2Pipe", | ||||
'IMDBPipe', | 'IMDBPipe', | ||||
"ChnSentiCorpPipe" | |||||
"ChnSentiCorpPipe", | |||||
"THUCNewsPipe", | |||||
"WeiboSenti100kPipe" | |||||
] | ] | ||||
import re | import re | ||||
@@ -17,7 +19,7 @@ from nltk import Tree | |||||
from .pipe import Pipe | from .pipe import Pipe | ||||
from .utils import get_tokenizer, _indexize, _add_words_field, _drop_empty_instance, _add_chars_field | from .utils import get_tokenizer, _indexize, _add_words_field, _drop_empty_instance, _add_chars_field | ||||
from ..data_bundle import DataBundle | from ..data_bundle import DataBundle | ||||
from ..loader.classification import ChnSentiCorpLoader | |||||
from ..loader.classification import ChnSentiCorpLoader, THUCNewsLoader, WeiboSenti100kLoader | |||||
from ..loader.classification import IMDBLoader, YelpFullLoader, SSTLoader, SST2Loader, YelpPolarityLoader | from ..loader.classification import IMDBLoader, YelpFullLoader, SSTLoader, SST2Loader, YelpPolarityLoader | ||||
from ...core.const import Const | from ...core.const import Const | ||||
from ...core.dataset import DataSet | from ...core.dataset import DataSet | ||||
@@ -580,4 +582,200 @@ class ChnSentiCorpPipe(Pipe): | |||||
data_bundle = ChnSentiCorpLoader().load(paths) | data_bundle = ChnSentiCorpLoader().load(paths) | ||||
data_bundle = self.process(data_bundle) | data_bundle = self.process(data_bundle) | ||||
return data_bundle | |||||
return data_bundle | |||||
class THUCNewsPipe(_CLSPipe): | |||||
""" | |||||
处理之后的DataSet有以下的结构 | |||||
.. csv-table:: | |||||
:header: "raw_chars", "chars", "target", "seq_len" | |||||
"马晓旭意外受伤让国奥警惕 无奈大雨格外青睐殷家军记者傅亚雨沈阳报道...", "[409, 1197, 2146, 213, ...]", 0, 746 | |||||
"..." | |||||
其中chars, seq_len是input,target是target | |||||
:param bool bigrams: 是否增加一列bigrams. bigrams的构成是['复', '旦', '大', '学', ...]->["复旦", "旦大", ...]。如果 | |||||
设置为True,返回的DataSet将有一列名为bigrams, 且已经转换为了index并设置为input,对应的vocab可以通过 | |||||
data_bundle.get_vocab('bigrams')获取. | |||||
:param bool trigrams: 是否增加一列trigrams. trigrams的构成是 ['复', '旦', '大', '学', ...]->["复旦大", "旦大学", ...] | |||||
。如果设置为True,返回的DataSet将有一列名为trigrams, 且已经转换为了index并设置为input,对应的vocab可以通过 | |||||
data_bundle.get_vocab('trigrams')获取. | |||||
""" | |||||
def __init__(self, bigrams=False, trigrams=False): | |||||
super().__init__() | |||||
self.bigrams = bigrams | |||||
self.trigrams = trigrams | |||||
def _chracter_split(self, sent): | |||||
return list(sent) | |||||
# return [w for w in sent] | |||||
def _raw_split(self, sent): | |||||
return sent.split() | |||||
def _tokenize(self, data_bundle, field_name=Const.INPUT, new_field_name=None): | |||||
new_field_name = new_field_name or field_name | |||||
for name, dataset in data_bundle.datasets.items(): | |||||
dataset.apply_field(self._chracter_split, field_name=field_name, new_field_name=new_field_name) | |||||
return data_bundle | |||||
def process(self, data_bundle: DataBundle): | |||||
""" | |||||
可处理的DataSet应具备如下的field | |||||
.. csv-table:: | |||||
:header: "raw_words", "target" | |||||
"马晓旭意外受伤让国奥警惕 无奈大雨格外青睐殷家军记者傅亚雨沈阳报道 ... ", "体育" | |||||
"...", "..." | |||||
:param data_bundle: | |||||
:return: | |||||
""" | |||||
# 根据granularity设置tag | |||||
tag_map = {'体育': 0, '财经': 1, '房产': 2, '家居': 3, '教育': 4, '科技': 5, '时尚': 6, '时政': 7, '游戏': 8, '娱乐': 9} | |||||
data_bundle = self._granularize(data_bundle=data_bundle, tag_map=tag_map) | |||||
# clean,lower | |||||
# CWS(tokenize) | |||||
data_bundle = self._tokenize(data_bundle=data_bundle, field_name='raw_chars', new_field_name='chars') | |||||
input_field_names = [Const.CHAR_INPUT] | |||||
# n-grams | |||||
if self.bigrams: | |||||
for name, dataset in data_bundle.iter_datasets(): | |||||
dataset.apply_field(lambda chars: [c1 + c2 for c1, c2 in zip(chars, chars[1:] + ['<eos>'])], | |||||
field_name=Const.CHAR_INPUT, new_field_name='bigrams') | |||||
input_field_names.append('bigrams') | |||||
if self.trigrams: | |||||
for name, dataset in data_bundle.iter_datasets(): | |||||
dataset.apply_field(lambda chars: [c1 + c2 + c3 for c1, c2, c3 in | |||||
zip(chars, chars[1:] + ['<eos>'], chars[2:] + ['<eos>'] * 2)], | |||||
field_name=Const.CHAR_INPUT, new_field_name='trigrams') | |||||
input_field_names.append('trigrams') | |||||
# index | |||||
data_bundle = _indexize(data_bundle=data_bundle, input_field_names=Const.CHAR_INPUT) | |||||
# add length | |||||
for name, dataset in data_bundle.datasets.items(): | |||||
dataset.add_seq_len(field_name=Const.CHAR_INPUT, new_field_name=Const.INPUT_LEN) | |||||
input_fields = [Const.TARGET, Const.INPUT_LEN] + input_field_names | |||||
target_fields = [Const.TARGET] | |||||
data_bundle.set_input(*input_fields) | |||||
data_bundle.set_target(*target_fields) | |||||
return data_bundle | |||||
def process_from_file(self, paths=None): | |||||
""" | |||||
:param paths: 支持路径类型参见 :class:`fastNLP.io.loader.Loader` 的load函数。 | |||||
:return: DataBundle | |||||
""" | |||||
data_loader = THUCNewsLoader() # 此处需要实例化一个data_loader,否则传入load()的参数为None | |||||
data_bundle = data_loader.load(paths) | |||||
data_bundle = self.process(data_bundle) | |||||
return data_bundle | |||||
class WeiboSenti100kPipe(_CLSPipe): | |||||
""" | |||||
处理之后的DataSet有以下的结构 | |||||
.. csv-table:: | |||||
:header: "raw_chars", "chars", "target", "seq_len" | |||||
"六一出生的?好讽刺…… //@祭春姬:他爸爸是外星人吧 //@面孔小高:现在的孩子都怎么了 [怒][怒][怒]", "[0, 690, 18, ...]", 0, 56 | |||||
"..." | |||||
其中chars, seq_len是input,target是target | |||||
:param bool bigrams: 是否增加一列bigrams. bigrams的构成是['复', '旦', '大', '学', ...]->["复旦", "旦大", ...]。如果 | |||||
设置为True,返回的DataSet将有一列名为bigrams, 且已经转换为了index并设置为input,对应的vocab可以通过 | |||||
data_bundle.get_vocab('bigrams')获取. | |||||
:param bool trigrams: 是否增加一列trigrams. trigrams的构成是 ['复', '旦', '大', '学', ...]->["复旦大", "旦大学", ...] | |||||
。如果设置为True,返回的DataSet将有一列名为trigrams, 且已经转换为了index并设置为input,对应的vocab可以通过 | |||||
data_bundle.get_vocab('trigrams')获取. | |||||
""" | |||||
def __init__(self, bigrams=False, trigrams=False): | |||||
super().__init__() | |||||
self.bigrams = bigrams | |||||
self.trigrams = trigrams | |||||
def _chracter_split(self, sent): | |||||
return list(sent) | |||||
def _tokenize(self, data_bundle, field_name=Const.INPUT, new_field_name=None): | |||||
new_field_name = new_field_name or field_name | |||||
for name, dataset in data_bundle.datasets.items(): | |||||
dataset.apply_field(self._chracter_split, field_name=field_name, new_field_name=new_field_name) | |||||
return data_bundle | |||||
def process(self, data_bundle: DataBundle): | |||||
""" | |||||
可处理的DataSet应具备以下的field | |||||
.. csv-table:: | |||||
:header: "raw_chars", "target" | |||||
"六一出生的?好讽刺…… //@祭春姬:他爸爸是外星人吧 //@面孔小高:现在的孩子都怎么了 [怒][怒][怒]", "0" | |||||
"...", "..." | |||||
:param data_bundle: | |||||
:return: | |||||
""" | |||||
# clean,lower | |||||
# CWS(tokenize) | |||||
data_bundle = self._tokenize(data_bundle=data_bundle, field_name='raw_chars', new_field_name='chars') | |||||
input_field_names = [Const.CHAR_INPUT] | |||||
# n-grams | |||||
if self.bigrams: | |||||
for name, dataset in data_bundle.iter_datasets(): | |||||
dataset.apply_field(lambda chars: [c1 + c2 for c1, c2 in zip(chars, chars[1:] + ['<eos>'])], | |||||
field_name=Const.CHAR_INPUT, new_field_name='bigrams') | |||||
input_field_names.append('bigrams') | |||||
if self.trigrams: | |||||
for name, dataset in data_bundle.iter_datasets(): | |||||
dataset.apply_field(lambda chars: [c1 + c2 + c3 for c1, c2, c3 in | |||||
zip(chars, chars[1:] + ['<eos>'], chars[2:] + ['<eos>'] * 2)], | |||||
field_name=Const.CHAR_INPUT, new_field_name='trigrams') | |||||
input_field_names.append('trigrams') | |||||
# index | |||||
data_bundle = _indexize(data_bundle=data_bundle, input_field_names='chars') | |||||
# add length | |||||
for name, dataset in data_bundle.datasets.items(): | |||||
dataset.add_seq_len(field_name=Const.CHAR_INPUT, new_field_name=Const.INPUT_LEN) | |||||
input_fields = [Const.TARGET, Const.INPUT_LEN] + input_field_names | |||||
target_fields = [Const.TARGET] | |||||
data_bundle.set_input(*input_fields) | |||||
data_bundle.set_target(*target_fields) | |||||
return data_bundle | |||||
def process_from_file(self, paths=None): | |||||
""" | |||||
:param paths: 支持路径类型参见 :class:`fastNLP.io.loader.Loader` 的load函数。 | |||||
:return: DataBundle | |||||
""" | |||||
data_loader = WeiboSenti100kLoader() # 此处需要实例化一个data_loader,否则传入load()的参数为None | |||||
data_bundle = data_loader.load(paths) | |||||
data_bundle = self.process(data_bundle) | |||||
return data_bundle | |||||
@@ -13,16 +13,20 @@ __all__ = [ | |||||
"QuoraPipe", | "QuoraPipe", | ||||
"QNLIPipe", | "QNLIPipe", | ||||
"MNLIPipe", | "MNLIPipe", | ||||
"XNLIPipe", | |||||
"BQCorpusPipe", | |||||
"LCQMCPipe" | |||||
] | ] | ||||
import warnings | import warnings | ||||
from .pipe import Pipe | from .pipe import Pipe | ||||
from .utils import get_tokenizer | from .utils import get_tokenizer | ||||
from ..loader.matching import SNLILoader, MNLILoader, QNLILoader, RTELoader, QuoraLoader | |||||
from ..loader.matching import SNLILoader, MNLILoader, QNLILoader, RTELoader, QuoraLoader, BQCorpusLoader, XNLILoader, LCQMCLoader | |||||
from ...core.const import Const | from ...core.const import Const | ||||
from ...core.vocabulary import Vocabulary | from ...core.vocabulary import Vocabulary | ||||
from ...core._logger import logger | from ...core._logger import logger | ||||
from ..data_bundle import DataBundle | |||||
class MatchingBertPipe(Pipe): | class MatchingBertPipe(Pipe): | ||||
@@ -110,7 +114,7 @@ class MatchingBertPipe(Pipe): | |||||
if ('train' not in name) and (ds.has_field(Const.TARGET))] | if ('train' not in name) and (ds.has_field(Const.TARGET))] | ||||
) | ) | ||||
if len(target_vocab._no_create_word) > 0: | if len(target_vocab._no_create_word) > 0: | ||||
warn_msg = f"There are {len(tgt_vocab._no_create_word)} target labels" \ | |||||
warn_msg = f"There are {len(target_vocab._no_create_word)} target labels" \ | |||||
f" in {[name for name in data_bundle.datasets.keys() if 'train' not in name]} " \ | f" in {[name for name in data_bundle.datasets.keys() if 'train' not in name]} " \ | ||||
f"data set but not in train data set!." | f"data set but not in train data set!." | ||||
warnings.warn(warn_msg) | warnings.warn(warn_msg) | ||||
@@ -247,7 +251,7 @@ class MatchingPipe(Pipe): | |||||
if ('train' not in name) and (ds.has_field(Const.TARGET))] | if ('train' not in name) and (ds.has_field(Const.TARGET))] | ||||
) | ) | ||||
if len(target_vocab._no_create_word) > 0: | if len(target_vocab._no_create_word) > 0: | ||||
warn_msg = f"There are {len(tgt_vocab._no_create_word)} target labels" \ | |||||
warn_msg = f"There are {len(target_vocab._no_create_word)} target labels" \ | |||||
f" in {[name for name in data_bundle.datasets.keys() if 'train' not in name]} " \ | f" in {[name for name in data_bundle.datasets.keys() if 'train' not in name]} " \ | ||||
f"data set but not in train data set!." | f"data set but not in train data set!." | ||||
warnings.warn(warn_msg) | warnings.warn(warn_msg) | ||||
@@ -302,3 +306,140 @@ class MNLIPipe(MatchingPipe): | |||||
def process_from_file(self, paths=None): | def process_from_file(self, paths=None): | ||||
data_bundle = MNLILoader().load(paths) | data_bundle = MNLILoader().load(paths) | ||||
return self.process(data_bundle) | return self.process(data_bundle) | ||||
class LCQMCPipe(MatchingPipe): | |||||
def process_from_file(self, paths = None): | |||||
data_bundle = LCQMCLoader().load(paths) | |||||
data_bundle = RenamePipe().process(data_bundle) | |||||
data_bundle = self.process(data_bundle) | |||||
data_bundle = RenamePipe().process(data_bundle) | |||||
return data_bundle | |||||
class XNLIPipe(MatchingPipe): | |||||
def process_from_file(self, paths = None): | |||||
data_bundle = XNLILoader().load(paths) | |||||
data_bundle = GranularizePipe(task = 'XNLI').process(data_bundle) | |||||
data_bundle = RenamePipe().process(data_bundle) #使中文数据的field | |||||
data_bundle = self.process(data_bundle) | |||||
data_bundle = RenamePipe().process(data_bundle) | |||||
return data_bundle | |||||
class BQCorpusPipe(MatchingPipe): | |||||
def process_from_file(self, paths = None): | |||||
data_bundle = BQCorpusLoader().load(paths) | |||||
data_bundle = RenamePipe().process(data_bundle) | |||||
data_bundle = self.process(data_bundle) | |||||
data_bundle = RenamePipe().process(data_bundle) | |||||
return data_bundle | |||||
class RenamePipe(Pipe): | |||||
def __init__(self, task = 'cn-nli'): | |||||
super().__init__() | |||||
self.task = task | |||||
def process(self, data_bundle: DataBundle): # rename field name for Chinese Matching dataset | |||||
if(self.task == 'cn-nli'): | |||||
for name, dataset in data_bundle.datasets.items(): | |||||
if (dataset.has_field(Const.RAW_CHARS(0))): | |||||
dataset.rename_field(Const.RAW_CHARS(0), Const.RAW_WORDS(0)) # RAW_CHARS->RAW_WORDS | |||||
dataset.rename_field(Const.RAW_CHARS(1), Const.RAW_WORDS(1)) | |||||
elif (dataset.has_field(Const.INPUTS(0))): | |||||
dataset.rename_field(Const.INPUTS(0), Const.CHAR_INPUTS(0)) # WORDS->CHARS | |||||
dataset.rename_field(Const.INPUTS(1), Const.CHAR_INPUTS(1)) | |||||
dataset.rename_field(Const.RAW_WORDS(0), Const.RAW_CHARS(0)) | |||||
dataset.rename_field(Const.RAW_WORDS(1), Const.RAW_CHARS(1)) | |||||
else: | |||||
raise RuntimeError( | |||||
"field name of dataset is not qualified. It should have ether RAW_CHARS or WORDS") | |||||
elif(self.task == 'cn-nli-bert'): | |||||
for name, dataset in data_bundle.datasets.items(): | |||||
if (dataset.has_field(Const.RAW_CHARS(0))): | |||||
dataset.rename_field(Const.RAW_CHARS(0), Const.RAW_WORDS(0)) # RAW_CHARS->RAW_WORDS | |||||
dataset.rename_field(Const.RAW_CHARS(1), Const.RAW_WORDS(1)) | |||||
elif(dataset.has_field(Const.RAW_WORDS(0))): | |||||
dataset.rename_field(Const.RAW_WORDS(0), Const.RAW_CHARS(0)) | |||||
dataset.rename_field(Const.RAW_WORDS(1), Const.RAW_CHARS(1)) | |||||
dataset.rename_field(Const.INPUT, Const.CHAR_INPUT) | |||||
else: | |||||
raise RuntimeError( | |||||
"field name of dataset is not qualified. It should have ether RAW_CHARS or RAW_WORDS" | |||||
) | |||||
else: | |||||
raise RuntimeError( | |||||
"Only support task='cn-nli' or 'cn-nli-bert'" | |||||
) | |||||
return data_bundle | |||||
class GranularizePipe(Pipe): | |||||
def __init__(self, task = None): | |||||
super().__init__() | |||||
self.task = task | |||||
def _granularize(self, data_bundle, tag_map): | |||||
""" | |||||
该函数对data_bundle中'target'列中的内容进行转换。 | |||||
:param data_bundle: | |||||
:param dict tag_map: 将target列中的tag做以下的映射,比如{"0":0, "1":0, "3":1, "4":1}, 则会删除target为"2"的instance, | |||||
且将"1"认为是第0类。 | |||||
:return: 传入的data_bundle | |||||
""" | |||||
for name in list(data_bundle.datasets.keys()): | |||||
dataset = data_bundle.get_dataset(name) | |||||
dataset.apply_field(lambda target: tag_map.get(target, -100), field_name=Const.TARGET, | |||||
new_field_name=Const.TARGET) | |||||
dataset.drop(lambda ins: ins[Const.TARGET] == -100) | |||||
data_bundle.set_dataset(dataset, name) | |||||
return data_bundle | |||||
def process(self, data_bundle: DataBundle): | |||||
task_tag_dict = { | |||||
'XNLI':{'neutral': 0, 'entailment': 1, 'contradictory': 2, 'contradiction': 2} | |||||
} | |||||
if self.task in task_tag_dict: | |||||
data_bundle = self._granularize(data_bundle=data_bundle, tag_map= task_tag_dict[self.task]) | |||||
else: | |||||
raise RuntimeError(f"Only support {task_tag_dict.keys()} task_tag_map.") | |||||
return data_bundle | |||||
class MachingTruncatePipe(Pipe): #truncate sentence for bert, modify seq_len | |||||
def __init__(self): | |||||
super().__init__() | |||||
def process(self, data_bundle: DataBundle): | |||||
for name, dataset in data_bundle.datasets.items(): | |||||
pass | |||||
return None | |||||
class LCQMCBertPipe(MatchingBertPipe): | |||||
def process_from_file(self, paths = None): | |||||
data_bundle = LCQMCLoader().load(paths) | |||||
data_bundle = RenamePipe(task='cn-nli-bert').process(data_bundle) | |||||
data_bundle = self.process(data_bundle) | |||||
data_bundle = RenamePipe(task='cn-nli-bert').process(data_bundle) | |||||
return data_bundle | |||||
class BQCorpusBertPipe(MatchingBertPipe): | |||||
def process_from_file(self, paths = None): | |||||
data_bundle = BQCorpusLoader().load(paths) | |||||
data_bundle = RenamePipe(task='cn-nli-bert').process(data_bundle) | |||||
data_bundle = self.process(data_bundle) | |||||
data_bundle = RenamePipe(task='cn-nli-bert').process(data_bundle) | |||||
return data_bundle | |||||
class XNLIBertPipe(MatchingBertPipe): | |||||
def process_from_file(self, paths = None): | |||||
data_bundle = XNLILoader().load(paths) | |||||
data_bundle = GranularizePipe(task='XNLI').process(data_bundle) | |||||
data_bundle = RenamePipe(task='cn-nli-bert').process(data_bundle) | |||||
data_bundle = self.process(data_bundle) | |||||
data_bundle = RenamePipe(task='cn-nli-bert').process(data_bundle) | |||||
return data_bundle |
@@ -76,15 +76,3 @@ def check_loader_paths(paths: Union[str, Dict[str, str]]) -> Dict[str, str]: | |||||
raise ValueError("Empty paths is not allowed.") | raise ValueError("Empty paths is not allowed.") | ||||
else: | else: | ||||
raise TypeError(f"paths only supports str and dict. not {type(paths)}.") | raise TypeError(f"paths only supports str and dict. not {type(paths)}.") | ||||
def get_tokenizer(): | |||||
try: | |||||
import spacy | |||||
spacy.prefer_gpu() | |||||
en = spacy.load('en') | |||||
logger.info('use spacy tokenizer') | |||||
return lambda x: [w.text for w in en.tokenizer(x)] | |||||
except Exception as e: | |||||
logger.error('use raw tokenizer') | |||||
return lambda x: x.split() |
@@ -15,6 +15,7 @@ from .base_model import BaseModel | |||||
from ..core.const import Const | from ..core.const import Const | ||||
from ..core.utils import seq_len_to_mask | from ..core.utils import seq_len_to_mask | ||||
from ..embeddings.embedding import TokenEmbedding, Embedding | from ..embeddings.embedding import TokenEmbedding, Embedding | ||||
from ..modules.encoder import BiAttention | |||||
class ESIM(BaseModel): | class ESIM(BaseModel): | ||||
@@ -50,7 +51,7 @@ class ESIM(BaseModel): | |||||
nn.Linear(8 * hidden_size, hidden_size), | nn.Linear(8 * hidden_size, hidden_size), | ||||
nn.ReLU()) | nn.ReLU()) | ||||
nn.init.xavier_uniform_(self.interfere[1].weight.data) | nn.init.xavier_uniform_(self.interfere[1].weight.data) | ||||
self.bi_attention = SoftmaxAttention() | |||||
self.bi_attention = BiAttention() | |||||
self.rnn_high = BiRNN(self.embedding.embed_size, hidden_size, dropout_rate=dropout_rate) | self.rnn_high = BiRNN(self.embedding.embed_size, hidden_size, dropout_rate=dropout_rate) | ||||
# self.rnn_high = LSTM(hidden_size, hidden_size, dropout=dropout_rate, bidirectional=True,) | # self.rnn_high = LSTM(hidden_size, hidden_size, dropout=dropout_rate, bidirectional=True,) | ||||
@@ -174,48 +175,3 @@ class BiRNN(nn.Module): | |||||
output = torch.cat([output, padding], 1) | output = torch.cat([output, padding], 1) | ||||
return output | return output | ||||
def masked_softmax(tensor, mask): | |||||
tensor_shape = tensor.size() | |||||
reshaped_tensor = tensor.view(-1, tensor_shape[-1]) | |||||
# Reshape the mask so it matches the size of the input tensor. | |||||
while mask.dim() < tensor.dim(): | |||||
mask = mask.unsqueeze(1) | |||||
mask = mask.expand_as(tensor).contiguous().float() | |||||
reshaped_mask = mask.view(-1, mask.size()[-1]) | |||||
result = F.softmax(reshaped_tensor * reshaped_mask, dim=-1) | |||||
result = result * reshaped_mask | |||||
# 1e-13 is added to avoid divisions by zero. | |||||
result = result / (result.sum(dim=-1, keepdim=True) + 1e-13) | |||||
return result.view(*tensor_shape) | |||||
def weighted_sum(tensor, weights, mask): | |||||
w_sum = weights.bmm(tensor) | |||||
while mask.dim() < w_sum.dim(): | |||||
mask = mask.unsqueeze(1) | |||||
mask = mask.transpose(-1, -2) | |||||
mask = mask.expand_as(w_sum).contiguous().float() | |||||
return w_sum * mask | |||||
class SoftmaxAttention(nn.Module): | |||||
def forward(self, premise_batch, premise_mask, hypothesis_batch, hypothesis_mask): | |||||
similarity_matrix = premise_batch.bmm(hypothesis_batch.transpose(2, 1) | |||||
.contiguous()) | |||||
prem_hyp_attn = masked_softmax(similarity_matrix, hypothesis_mask) | |||||
hyp_prem_attn = masked_softmax(similarity_matrix.transpose(1, 2) | |||||
.contiguous(), | |||||
premise_mask) | |||||
attended_premises = weighted_sum(hypothesis_batch, | |||||
prem_hyp_attn, | |||||
premise_mask) | |||||
attended_hypotheses = weighted_sum(premise_batch, | |||||
hyp_prem_attn, | |||||
hypothesis_mask) | |||||
return attended_premises, attended_hypotheses |
@@ -36,6 +36,7 @@ __all__ = [ | |||||
"MaxPool", | "MaxPool", | ||||
"MaxPoolWithMask", | "MaxPoolWithMask", | ||||
"KMaxPool", | |||||
"AvgPool", | "AvgPool", | ||||
"AvgPoolWithMask", | "AvgPoolWithMask", | ||||
@@ -23,18 +23,21 @@ __all__ = [ | |||||
"MaxPool", | "MaxPool", | ||||
"MaxPoolWithMask", | "MaxPoolWithMask", | ||||
"KMaxPool", | |||||
"AvgPool", | "AvgPool", | ||||
"AvgPoolWithMask", | "AvgPoolWithMask", | ||||
"MultiHeadAttention", | "MultiHeadAttention", | ||||
"BiAttention", | |||||
"SelfAttention", | |||||
] | ] | ||||
from .attention import MultiHeadAttention | |||||
from .attention import MultiHeadAttention, BiAttention, SelfAttention | |||||
from .bert import BertModel | from .bert import BertModel | ||||
from .char_encoder import ConvolutionCharEncoder, LSTMCharEncoder | from .char_encoder import ConvolutionCharEncoder, LSTMCharEncoder | ||||
from .conv_maxpool import ConvMaxpool | from .conv_maxpool import ConvMaxpool | ||||
from .lstm import LSTM | from .lstm import LSTM | ||||
from .pooling import MaxPool, MaxPoolWithMask, AvgPool, AvgPoolWithMask | |||||
from .pooling import MaxPool, MaxPoolWithMask, AvgPool, AvgPoolWithMask, KMaxPool | |||||
from .star_transformer import StarTransformer | from .star_transformer import StarTransformer | ||||
from .transformer import TransformerEncoder | from .transformer import TransformerEncoder | ||||
from .variational_rnn import VarRNN, VarLSTM, VarGRU | from .variational_rnn import VarRNN, VarLSTM, VarGRU |
@@ -1,7 +1,9 @@ | |||||
"""undocumented""" | """undocumented""" | ||||
__all__ = [ | __all__ = [ | ||||
"MultiHeadAttention" | |||||
"MultiHeadAttention", | |||||
"BiAttention", | |||||
"SelfAttention", | |||||
] | ] | ||||
import math | import math | ||||
@@ -15,8 +17,7 @@ from fastNLP.modules.utils import initial_parameter | |||||
class DotAttention(nn.Module): | class DotAttention(nn.Module): | ||||
""" | """ | ||||
.. todo:: | |||||
补上文档 | |||||
Transformer当中的DotAttention | |||||
""" | """ | ||||
def __init__(self, key_size, value_size, dropout=0.0): | def __init__(self, key_size, value_size, dropout=0.0): | ||||
@@ -45,7 +46,7 @@ class DotAttention(nn.Module): | |||||
class MultiHeadAttention(nn.Module): | class MultiHeadAttention(nn.Module): | ||||
""" | """ | ||||
Transformer当中的MultiHeadAttention | |||||
""" | """ | ||||
def __init__(self, input_size, key_size, value_size, num_head, dropout=0.1): | def __init__(self, input_size, key_size, value_size, num_head, dropout=0.1): | ||||
@@ -104,74 +105,78 @@ class MultiHeadAttention(nn.Module): | |||||
return output | return output | ||||
def _masked_softmax(tensor, mask): | |||||
tensor_shape = tensor.size() | |||||
reshaped_tensor = tensor.view(-1, tensor_shape[-1]) | |||||
# Reshape the mask so it matches the size of the input tensor. | |||||
while mask.dim() < tensor.dim(): | |||||
mask = mask.unsqueeze(1) | |||||
mask = mask.expand_as(tensor).contiguous().float() | |||||
reshaped_mask = mask.view(-1, mask.size()[-1]) | |||||
result = F.softmax(reshaped_tensor * reshaped_mask, dim=-1) | |||||
result = result * reshaped_mask | |||||
# 1e-13 is added to avoid divisions by zero. | |||||
result = result / (result.sum(dim=-1, keepdim=True) + 1e-13) | |||||
return result.view(*tensor_shape) | |||||
def _weighted_sum(tensor, weights, mask): | |||||
w_sum = weights.bmm(tensor) | |||||
while mask.dim() < w_sum.dim(): | |||||
mask = mask.unsqueeze(1) | |||||
mask = mask.transpose(-1, -2) | |||||
mask = mask.expand_as(w_sum).contiguous().float() | |||||
return w_sum * mask | |||||
class BiAttention(nn.Module): | class BiAttention(nn.Module): | ||||
r"""Bi Attention module | |||||
.. todo:: | |||||
这个模块的负责人来继续完善一下 | |||||
Calculate Bi Attention matrix `e` | |||||
r""" | |||||
Bi Attention module | |||||
对于给定的两个向量序列 :math:`a_i` 和 :math:`b_j` , BiAttention模块将通过以下的公式来计算attention结果 | |||||
.. math:: | .. math:: | ||||
\begin{array}{ll} \\ | \begin{array}{ll} \\ | ||||
e_ij = {a}^{\mathbf{T}}_{i}{b}_{j} \\ | |||||
a_i = | |||||
b_j = | |||||
e_{ij} = {a}^{\mathrm{T}}_{i}{b}_{j} \\ | |||||
{\hat{a}}_{i} = \sum_{j=1}^{\mathcal{l}_{b}}{\frac{\mathrm{exp}(e_{ij})}{\sum_{k=1}^{\mathcal{l}_{b}}{\mathrm{exp}(e_{ik})}}}{b}_{j} \\ | |||||
{\hat{b}}_{j} = \sum_{i=1}^{\mathcal{l}_{a}}{\frac{\mathrm{exp}(e_{ij})}{\sum_{k=1}^{\mathcal{l}_{a}}{\mathrm{exp}(e_{ik})}}}{a}_{i} \\ | |||||
\end{array} | \end{array} | ||||
""" | |||||
def __init__(self): | |||||
super(BiAttention, self).__init__() | |||||
self.inf = 10e12 | |||||
""" | |||||
def forward(self, in_x1, in_x2, x1_len, x2_len): | |||||
def forward(self, premise_batch, premise_mask, hypothesis_batch, hypothesis_mask): | |||||
""" | """ | ||||
:param torch.Tensor in_x1: [batch_size, x1_seq_len, hidden_size] 第一句的特征表示 | |||||
:param torch.Tensor in_x2: [batch_size, x2_seq_len, hidden_size] 第二句的特征表示 | |||||
:param torch.Tensor x1_len: [batch_size, x1_seq_len] 第一句的0/1mask矩阵 | |||||
:param torch.Tensor x2_len: [batch_size, x2_seq_len] 第二句的0/1mask矩阵 | |||||
:return: torch.Tensor out_x1: [batch_size, x1_seq_len, hidden_size] 第一句attend到的特征表示 | |||||
torch.Tensor out_x2: [batch_size, x2_seq_len, hidden_size] 第一句attend到的特征表示 | |||||
:param torch.Tensor premise_batch: [batch_size, a_seq_len, hidden_size] | |||||
:param torch.Tensor premise_mask: [batch_size, a_seq_len] | |||||
:param torch.Tensor hypothesis_batch: [batch_size, b_seq_len, hidden_size] | |||||
:param torch.Tensor hypothesis_mask: [batch_size, b_seq_len] | |||||
:return: torch.Tensor attended_premises: [batch_size, a_seq_len, hidden_size] | |||||
torch.Tensor attended_hypotheses: [batch_size, b_seq_len, hidden_size] | |||||
""" | """ | ||||
similarity_matrix = premise_batch.bmm(hypothesis_batch.transpose(2, 1) | |||||
.contiguous()) | |||||
assert in_x1.size()[0] == in_x2.size()[0] | |||||
assert in_x1.size()[2] == in_x2.size()[2] | |||||
# The batch size and hidden size must be equal. | |||||
assert in_x1.size()[1] == x1_len.size()[1] and in_x2.size()[1] == x2_len.size()[1] | |||||
# The seq len in in_x and x_len must be equal. | |||||
assert in_x1.size()[0] == x1_len.size()[0] and x1_len.size()[0] == x2_len.size()[0] | |||||
batch_size = in_x1.size()[0] | |||||
x1_max_len = in_x1.size()[1] | |||||
x2_max_len = in_x2.size()[1] | |||||
in_x2_t = torch.transpose(in_x2, 1, 2) # [batch_size, hidden_size, x2_seq_len] | |||||
attention_matrix = torch.bmm(in_x1, in_x2_t) # [batch_size, x1_seq_len, x2_seq_len] | |||||
a_mask = x1_len.le(0.5).float() * -self.inf # [batch_size, x1_seq_len] | |||||
a_mask = a_mask.view(batch_size, x1_max_len, -1) | |||||
a_mask = a_mask.expand(-1, -1, x2_max_len) # [batch_size, x1_seq_len, x2_seq_len] | |||||
b_mask = x2_len.le(0.5).float() * -self.inf | |||||
b_mask = b_mask.view(batch_size, -1, x2_max_len) | |||||
b_mask = b_mask.expand(-1, x1_max_len, -1) # [batch_size, x1_seq_len, x2_seq_len] | |||||
attention_a = F.softmax(attention_matrix + a_mask, dim=2) # [batch_size, x1_seq_len, x2_seq_len] | |||||
attention_b = F.softmax(attention_matrix + b_mask, dim=1) # [batch_size, x1_seq_len, x2_seq_len] | |||||
prem_hyp_attn = _masked_softmax(similarity_matrix, hypothesis_mask) | |||||
hyp_prem_attn = _masked_softmax(similarity_matrix.transpose(1, 2) | |||||
.contiguous(), | |||||
premise_mask) | |||||
out_x1 = torch.bmm(attention_a, in_x2) # [batch_size, x1_seq_len, hidden_size] | |||||
attention_b_t = torch.transpose(attention_b, 1, 2) | |||||
out_x2 = torch.bmm(attention_b_t, in_x1) # [batch_size, x2_seq_len, hidden_size] | |||||
attended_premises = _weighted_sum(hypothesis_batch, | |||||
prem_hyp_attn, | |||||
premise_mask) | |||||
attended_hypotheses = _weighted_sum(premise_batch, | |||||
hyp_prem_attn, | |||||
hypothesis_mask) | |||||
return out_x1, out_x2 | |||||
return attended_premises, attended_hypotheses | |||||
class SelfAttention(nn.Module): | class SelfAttention(nn.Module): | ||||
""" | """ | ||||
Self Attention Module. | |||||
这是一个基于论文 `A structured self-attentive sentence embedding <https://arxiv.org/pdf/1703.03130.pdf>`_ | |||||
的Self Attention Module. | |||||
""" | """ | ||||
def __init__(self, input_size, attention_unit=300, attention_hops=10, drop=0.5, initial_method=None, ): | def __init__(self, input_size, attention_unit=300, attention_hops=10, drop=0.5, initial_method=None, ): | ||||
@@ -210,9 +215,9 @@ class SelfAttention(nn.Module): | |||||
def forward(self, input, input_origin): | def forward(self, input, input_origin): | ||||
""" | """ | ||||
:param torch.Tensor input: [baz, senLen, h_dim] 要做attention的矩阵 | |||||
:param torch.Tensor input_origin: [baz , senLen] 原始token的index组成的矩阵,含有pad部分内容 | |||||
:return torch.Tensor output1: [baz, multi-head , h_dim] 经过attention操作后输入矩阵的结果 | |||||
:param torch.Tensor input: [batch_size, seq_len, hidden_size] 要做attention的矩阵 | |||||
:param torch.Tensor input_origin: [batch_size, seq_len] 原始token的index组成的矩阵,含有pad部分内容 | |||||
:return torch.Tensor output1: [batch_size, multi-head, hidden_size] 经过attention操作后输入矩阵的结果 | |||||
:return torch.Tensor output2: [1] attention惩罚项,是一个标量 | :return torch.Tensor output2: [1] attention惩罚项,是一个标量 | ||||
""" | """ | ||||
input = input.contiguous() | input = input.contiguous() | ||||
@@ -3,6 +3,7 @@ | |||||
__all__ = [ | __all__ = [ | ||||
"MaxPool", | "MaxPool", | ||||
"MaxPoolWithMask", | "MaxPoolWithMask", | ||||
"KMaxPool", | |||||
"AvgPool", | "AvgPool", | ||||
"AvgPoolWithMask" | "AvgPoolWithMask" | ||||
] | ] | ||||
@@ -27,7 +28,7 @@ class MaxPool(nn.Module): | |||||
:param ceil_mode: | :param ceil_mode: | ||||
""" | """ | ||||
super(MaxPool, self).__init__() | super(MaxPool, self).__init__() | ||||
assert (1 <= dimension) and (dimension <= 3) | |||||
assert dimension in [1, 2, 3], f'Now we only support 1d, 2d, or 3d Pooling' | |||||
self.dimension = dimension | self.dimension = dimension | ||||
self.stride = stride | self.stride = stride | ||||
self.padding = padding | self.padding = padding | ||||
@@ -37,12 +38,12 @@ class MaxPool(nn.Module): | |||||
def forward(self, x): | def forward(self, x): | ||||
if self.dimension == 1: | if self.dimension == 1: | ||||
x = torch.transpose(x, 1, 2) # [N,L,C] -> [N,C,L] | |||||
pooling = nn.MaxPool1d( | pooling = nn.MaxPool1d( | ||||
stride=self.stride, padding=self.padding, dilation=self.dilation, | stride=self.stride, padding=self.padding, dilation=self.dilation, | ||||
kernel_size=self.kernel_size if self.kernel_size is not None else x.size(-1), | kernel_size=self.kernel_size if self.kernel_size is not None else x.size(-1), | ||||
return_indices=False, ceil_mode=self.ceil_mode | return_indices=False, ceil_mode=self.ceil_mode | ||||
) | ) | ||||
x = torch.transpose(x, 1, 2) # [N,L,C] -> [N,C,L] | |||||
elif self.dimension == 2: | elif self.dimension == 2: | ||||
pooling = nn.MaxPool2d( | pooling = nn.MaxPool2d( | ||||
stride=self.stride, padding=self.padding, dilation=self.dilation, | stride=self.stride, padding=self.padding, dilation=self.dilation, | ||||
@@ -50,7 +51,7 @@ class MaxPool(nn.Module): | |||||
return_indices=False, ceil_mode=self.ceil_mode | return_indices=False, ceil_mode=self.ceil_mode | ||||
) | ) | ||||
else: | else: | ||||
pooling = nn.MaxPool2d( | |||||
pooling = nn.MaxPool3d( | |||||
stride=self.stride, padding=self.padding, dilation=self.dilation, | stride=self.stride, padding=self.padding, dilation=self.dilation, | ||||
kernel_size=self.kernel_size if self.kernel_size is not None else (x.size(-3), x.size(-2), x.size(-1)), | kernel_size=self.kernel_size if self.kernel_size is not None else (x.size(-3), x.size(-2), x.size(-1)), | ||||
return_indices=False, ceil_mode=self.ceil_mode | return_indices=False, ceil_mode=self.ceil_mode | ||||
@@ -0,0 +1,6 @@ | |||||
sentence1,sentence2,label | |||||
综合评分不足什么原因,综合评估的依据,0 | |||||
什么时候我能使用微粒贷,你就赶快给我开通就行了,0 | |||||
如何修改每个月的还款日期,可以申请延期还款日吗?,0 | |||||
没什么问的,不能登陆就是我最大的问题了,登录不上,1 | |||||
你的意思是不能取现,借到的钱可不可以提出来,1 |
@@ -0,0 +1,6 @@ | |||||
sentence1,sentence2,label | |||||
你电话号码多少,你们的客服电话是多少?,1 | |||||
10000块日利息是多少,0.05%就是借2000块,利息为1块钱一天,1 | |||||
17号还款了,我现在想提前几天还,怎么弄,一直按时还款,提前还款,怎么会评估不足,0 | |||||
我昨晚申请的,现在钱没到,也没有人联系我,审核多久才会打电话,1 | |||||
假如我贷四万还款怎么,18号还款日可以不凌晨扣款,我18日下午还款可以吗,0 |
@@ -0,0 +1,6 @@ | |||||
sentence1,sentence2,label | |||||
一天了还是不能登录,你好,用app干嘛但是无法登入,1 | |||||
为什么我的钱包点开,没显示微粒贷呀,点击我进入钱包,没有,借款的,提示呀!,1 | |||||
什么要求,借款没有,0 | |||||
微信注册的手机号停机了,还可以办理吗,没有邀请可以注册嘛,0 | |||||
开通微粒贷,开通微粒贷!强烈要求,1 |
@@ -0,0 +1,7 @@ | |||||
label text_a | |||||
1 基金痛所有投资项目一样,必须先要有所了解,才能把握分寸,不至于跟风而造成损失。此本基金入门的书是一个不错的选择,不像一般的书一样偏重概念,虽然也涉及到概念,但作者用自己的方式解读,使第一次接触基金的人能更好的理解。内容以非常容易理解的语言象大众普及了基金的很多观念,对于普通基民来说,要想有所收获,必须了解基金界的很多情况,在关键的时候才不会盲目跟风。对于新手,强烈推荐。 | |||||
1 系统很好装,LED屏是不错,就是16比9的比例看起来比较长,是14.0的屏。外观比较酷,适合年轻人,键盘模仿SONY的,还不错。 | |||||
1 这书的装帧很好的,既适合家庭收藏亦适合阅读了解。了解一个人,通过他的书信,而且是家书,再好不过了,而了解这个人也更了解些那个时代,那个社会,给我们现代人些许启发吧。而我从中也知道了他的学习习惯、方法以及教子方面。比较有收获。软精装的封面,封面要是每个唐老师那个照片就更好了,分上下册便于阅读。内里字体有分别:信是用的启功老师的手写字体,评点是宋体。 | |||||
0 屏幕没有坏点和暗点,这个比较不错。配置性价比较高,目前使用已有半个月,基本正常。 | |||||
0 典型的国营酒店,管理层缺乏责任心,管理混乱。房间里的大灯镜灯台灯都是坏的,只有一盏床头灯可用,不知道酒店是怎么维护的。最可气的是结帐时竟然要求客人赔偿房间里已损坏很久的鞋盒,简直是讹诈。 | |||||
0 普通游客旅馆 还三星 让我伤心 店名好大 奇差无比 补充点评 2006年12月8日 : 还说有地下车库 谁敢下去 晕 狭小 黑暗 要卡壳儿的 CTRIP上怎么让它这么忽悠顾客的 ?!!!!!!! |
@@ -0,0 +1,7 @@ | |||||
label text_a | |||||
0 v系统和XP系统能做到二选一就更好了,毕竟大部分人还是更偏爱XP系统。 | |||||
0 自带的Linix系统上上网还可以,想玩其他的功能毫无疑问得换XP.偶在京东订的时候为了装XP方便,一起买了阿帕奇的USB光驱。到货后,发现该USB光驱无法引导系统光盘启动,已验证过该光驱读写功能正常。 | |||||
1 非常不错的酒店,依山傍水,里面大片森林,散散步很不错,坐在湖边也休息也是不错的选择;房间很幽静,房间的设施很好,服务员态度也很好。 | |||||
0 5月8日付款成功,当当网显示5月10日发货,可是至今还没看到货物,也没收到任何通知,简不知怎么说好!!! | |||||
1 收到书,还未打开就被封面的鲜艳色彩及版样吸引,迫不急待的打开,书内的设计及彩图也不错,色泽及印刷质量都称的上好,没有味道,贴图也从简入深。价格也不贵。拿回家,小宝贝也很喜欢,我家宝宝只有2岁5个月对于她贴片不太好撕,大一些的贴片要我来帮她撕。不过,今天再玩时已经比昨天撕的好很多了,可以锻炼她的小手呢。等这几本用完了,我想我还会再给她买一些类似的书。 | |||||
0 挺失望的,还不如买一本张爱玲文集呢,以<色戒>命名,可这篇文章仅仅10多页,且无头无尾的,完全比不上里面的任意一篇其它文章. |
@@ -0,0 +1,7 @@ | |||||
label text_a | |||||
1 很好的酒店,很规范植得一住.餐厅一般不应该的,不知道为什么. 宾馆反馈 2008年4月17日 : 餐厅现已重新装修,用餐环境较以前要好的多。谢谢您的宝贵意见! | |||||
0 这是我看过文字写得很糟糕的书,因为买了,还是耐着性子看完了,但是总体来说不好,文字、内容、结构都不好 | |||||
1 拿房时没大床房了,给我们免费升成套房,这点还蛮满意的。酒店大致不错,有国内五星水准。比国际品牌的要差一点。酒店有点年纪了,维修要加强,比如我们浴室的下水就堵塞不通,这些在客人入住前就该发觉修好。其它都还可以。 | |||||
1 开始看了2005年的几位朋友的评价,都不敢去入住。没想到现在改观了很多,房间虽小,但很整洁。下次再来的话,还会选择这个酒店。只是希望宽带能一直免费! | |||||
0 本机预装的Vista跟瑞星杀软不兼容,蓝屏,不能进入系统,不能自行卸载!!千万小心别装,用卡巴可以。 | |||||
0 跟心灵鸡汤没什么本质区别嘛,至少我不喜欢这样读经典,把经典都解读成这样有点去中国化的味道了 |
@@ -0,0 +1,6 @@ | |||||
开初婚未育证明怎么弄? 初婚未育情况证明怎么开? 1 | |||||
脚气怎么治疗 醋怎么治疗脚气 0 | |||||
世界是先有男人还是先有女人 世界上是先有男人还是先有女人 1 | |||||
有什么小说软件好用的 那个看小说的阅读器较好 1 | |||||
网上兼职是做什么的,手机可以做吗 手机可以做什么网上兼职,拍单子是什么 0 | |||||
郑州有什么好玩的地方? 郑州有什么好玩的地方啊 1 |
@@ -0,0 +1,5 @@ | |||||
谁有狂三这张高清的 这张高清图,谁有 0 | |||||
淘宝模特叫什么?急 淘宝的模特她叫什么 1 | |||||
不要嘛用韩语怎么说 韩语的请不要走怎么说 0 | |||||
倒瓜子脸适合什么发型 额头高又是瓜子脸的女生适合什么刘海 0 | |||||
淘宝流量怎么买 刚淘宝店如何才能有流量 0 |
@@ -0,0 +1,6 @@ | |||||
喜欢打篮球的男生喜欢什么样的女生 爱打篮球的男生喜欢什么样的女生 1 | |||||
你帮我设计小说的封面吧 谁能帮我给小说设计个封面? 0 | |||||
移动手机卡刷砖 关于移动手机卡 0 | |||||
有什么好听的短信铃声啊 有什么好听的韩剧短信铃声 0 | |||||
人生的三大事是什么 人生三大事是什么? 1 | |||||
您好是后8位的 您提供后8位即可, 1 |
@@ -0,0 +1,9 @@ | |||||
体育 调查-您如何评价热火客场胜绿军总分3-1夺赛点?新浪体育讯四年了,终于赢球了,热火在凯尔特人的主场经过加时98-90艰难战胜对手,总比分3-1领先,詹姆斯拿下35分14个篮板,韦德28分9篮板,波什20分12个篮板。您如何评价这场比赛? | |||||
娱乐 盘点好莱坞明星新年目标 布兰妮迪亚兹在列(图)新年伊始,又是制定新一年目标的时候了。大到关注环保、寻找真爱,小到改掉坏毛病、改变生活习惯,这些都是美国演艺明星在2009年中的目标。●告别烟圈好莱坞女星卡梅隆·迪亚兹计划在新的一年戒烟,和她目标相同者还有《实习医生格蕾》中的凯瑟琳·海格尔及《飞跃贝弗利》中的布莱恩·奥斯汀·格林。格林说:“每年我似乎都说要戒烟,看看今年行不行吧。”●不咬指甲女歌手布兰妮( 听歌)希望自己“改掉咬手指甲的毛病”。此外,她还表示:“我希望自己不再焦虑,以前的我无时无刻不在焦虑中,我要学会让自己幸福。”●寻觅真爱凭借《灵魂歌王》一片夺得2005年奥斯卡()奖的杰米·福克斯希望自己能在2009年找到真爱。●回归平静去年刚刚与男友分手的影星安妮·海瑟薇则希望过上平静的生活。●享受滑雪因出演《灵异第六感》而一举成名的影星黑利·乔尔·奥斯门特的最大愿望就是重拾自己滑雪的爱好,并从美国犹他州的某座高山上直冲而下。●致力环保曾主演《异形》和《冰风暴》等片的女演员西戈尼·威弗表示要为环保事业贡献力量。她说:“我不再使用塑料袋,手头现有的这些我也要循环使用。”●亲近素食《绝望主妇》中的伊娃·朗格利亚的目标是努力尝试吃素。●活络筋骨热门电视剧《汉娜·蒙塔娜》的主角麦莉·赛勒斯关心的问题则是“多做运动”。●回馈世界要说计划最为抽象的当数帕丽斯·希尔顿,她说:“我已经长大了,成熟了,我要怀着一颗感恩的心,开始回馈世界。”●计划“计划”1983年出演《战争游戏》的马修·布罗德里克的新年计划最别具一格,他的计划就是在2009年“拟订计划”。○据新华社 | |||||
家居 蓝景丽家尹勃乐居思路清晰 创新开拓(图) 新浪家居谢娟讯 10月16日,易居中国与新浪合资公司中国房产信息集团(简称CRIC)在美国纳斯达克成功上市。此消息一出,家居业界大腕在分享喜悦的同时,纷纷来电来函,向中国房产信息集团成功登陆纳斯达克表示祝贺,同时对CRIC在未来发展提出了中肯的建议和期待。新浪家居电话连线业内数位大腕,倾听他们对此事的看法,以及对中国房产信息集团上市寄语。【CRIC(中国房产信息集团)纳斯达克挂牌上市】 采访嘉宾:蓝景丽家总经理 尹勃 新浪家居:您好,尹总,我是新浪乐居家居频道编辑谢娟,感谢您接受本次访谈。 尹勃:您好。 新浪家居:北京时间2009年10月16日,易居中国与新浪合资公司中国房产信息集团在美国纳斯达克成功上市融资2亿美元。您是否知道此事?您对此有怎样的看法? 尹勃:刚刚知道!对家居很好的促进作用,希望能够加大北京市场支持力度,给予北京市场更高的重视。 新浪家居:感谢您的肯定。同时也希望您能给予建设性的意见。 尹勃:在罗总的带领下做的比较有声势,目前的思路更清晰。希望乐居做到较其他媒体更有高度,活动更有所创新。 新浪家居:您有怎样的祝语? 尹勃:祝新浪乐居越办越好,带动北京家居市场更上一层楼! 【嘉宾简介】 尹勃:(蓝景丽家总经理 北京市建筑装饰协会家装委员会副会长 北京市场协会家居分会副会长 北京家具协会常务理事 中国建材市场协会理事会副理事长)家居流通卖场一路走来,从昔日倒爷式的地摊、棚户到今天品牌型的综合、主题式购物广场,经历了多少时代的洗礼。尹勃作为这个行业中翘楚企业的负责人,见证了整个家具行业的变迁。名字后面这一连串的职务介绍足以说明他在整个行业中举足轻重的影响力,也更加肯定了他对“蓝景丽家”这个行业航母的巨大贡献。 【推荐阅读】 蓝景丽家十一精彩促销撼京城 百城万店无假货蓝景丽家启动 乐居装修日首战告捷 蓝景丽家销售额逆势暴涨 【媒体声音】 中国证券报:新浪易居合资公司CRIC登陆纳市 上证报:新浪易居合资公司CRIC逆市登陆纳市 第一财经日报:CRIC上市首日市值20亿美元 新华网:新浪与易居合资公司CRIC登陆纳斯达克 专访丁祖昱:CRIC在做前人没有做过的事情 专访罗军:CRIC具有巨大的商业潜力 专访曹国伟:在某些垂直领域会做更多尝试 【更多】 上市背景资料: 美国东部时间10月16日(北京时间10月16日)消息,易居中国与新浪合资公司中国房产信息集团(以下简称CRIC)在美国纳斯达克挂牌上市,首日开盘价12.28美元,超出发行价0.28美元。CRIC为易居中国与新浪的合资公司,股票代码为CRIC,发行价12美元,共发行美国存托股票(ADS)1800万股,同时承销商有权在未来30天内,行使总额达到270万股的超额配售权,此次IPO共计募集资金约2.16亿美元。作为中国在美国的地产科技第一股,CRIC是中国最大的专业房地产信息服务公司,并且拥有同时覆盖线上线下的房地产综合信息和服务平台。CRIC的成功上市,也创造了两家在美国上市的中国公司,分拆各自极具成长力的业务后进行合并,并进行二次上市的先河。CRIC联席董事长、CEO周忻表示;“我们很高兴看到CRIC成功上市,此次IPO将确立CRIC作为中国房地产信息服务第一品牌的地位,并有利于CRIC继续推进国内最大和最先进的房地产信息系统建设,使CRIC成为同时覆盖线上和线下的强大中国房地产网络信息服务平台,为房地产开发商、供应商、专业机构以及个人用户提供多元化房地产信息服务。CRIC联席董事长、新浪CEO曹国伟表示:“CRIC的成功上市,是易居中国和新浪合作的重要一步,也是我们在垂直领域商业模式探索的有益尝试,我们很高兴有机会发挥双方的协同效应。而进一步拓展和深化互联网垂直领域的商机,建立公司在细分市场的核心竞争力并做大做强,这也是新浪未来长远战略的重要组成部分。 | |||||
房产 弘阳大厦骏馆开盘 首日热销1亿昨天,位于南京大桥北路69号的红太阳销售中心人头攒动,当天开盘的弘阳大厦·骏馆取得了开门红,由于产品品质高端、户型精致总价又低,吸引了一拨又一拨看房者,当天销售额突破了一个亿。弘阳大厦·骏馆位于南京市浦口区大桥北路西侧,紧邻已建成的旭日华庭金棕榈园区旁,用地总面积6万多平米,包括一个包含酒店公寓、商业及办公的综合楼,一个酒店式公寓以及8万平方米的居住建筑和15000平方米的商业。弘阳大厦作为这块地块中的综合楼,主楼高99.65米,共28层,是集办公、商业、餐饮、公寓为一体的泛配套复合多功能商住楼。此次推出的弘阳大厦·骏馆,是弘阳大厦其中5-22层的酒店式公寓,主力户型为41-75平米商住先锋小户型。由于项目地处桥北新城的核心位置,离市区仅一桥之隔,规划中的地铁与过江隧道近在咫尺,兼具成熟配套资源优势。公共交通也非常方便,131、132、鼓珍、鼓扬、汉江、中六、汉六等多条公交线路可以直达该项目。除了地处桥北核心地段,具备传统的生活多方面配套以外,弘阳大厦·骏馆还拥有同属弘阳集团旗下的华东MALL完美商业配套。 我要评论 | |||||
教育 名师解析标准读音在四级考试中的重要性对于中国学生而言,都知道口语和听力很重要,但就是怎么也不好过关,究其原因就是他们英语发音不标准。一、口语。一口标准而流利的口语可以立即提升你的形象,给人以很好的第一印象。举例1:汤姆汉克斯主演的电影《幸福终点站》中有一个情节,大家应该很熟悉:他将a man of mystery“一个神秘的人”读成了a man of misery“一个痛苦的人”,意思相差了十万八千里,自然造成理解障碍。举例2:中文中v和w没有任何区别,说“我wo”的时候,如果上齿咬着下唇的话,也无所谓,因为不会产生任何歧义。但是英文中不一样,这两个音区别很大。vine表示“葡萄藤”;而wine则表示“葡萄酒”。green wine表示“新酒”;而green vine则表示“绿色的葡萄藤”。读错了音意思差别可就大了去了。举例3:一位外国人在中国马路上迷了路,见到一位姑娘,立即冲上前去,说道:“我想吻(问)你...”吓得姑娘连忙跑掉,就是因为读音的问题,外国人在中国也会遭遇理解障碍。二、听力。听力在四级考试中占35%的份额,如果听力不如意的话,考试想要及格真的是很难。听力过程中学生可能会有以下几种体会:1. 根本听不清楚读音——因为不熟悉英文的读音规则;2. 听清了读音,但对应不出是哪个单词——词汇量不够,没有好好记单词;3. 听清了读音,也知道是哪个单词,但忘了啥意思了——还是词汇量不够,对于单词不熟悉;4. 对于spot dictation题型而言,听清了,知道是哪个单词,但就是—写就出现拼写错误——还是词汇没记好。第一,注意单词的读音,英式的和美式的。如:It's very hot today. 中hot美语中几乎就读成了hut这个词的读音了。第二,句子一连读、失去爆破等,连单词的影子都找不到了。如:This-is-an ol(d) pi(c)ture-of-a bi(g) car。横线表示连读,连读起来都不知道到底是一个词还是几个词了,括号里是不发音的,所以这个句子一旦读出来就完全走了样了。但听力中这种现象确是很常见的。要想练习好听力,首先要练习好英文的读音,包括词和句的读音规则。尤其对于外地孩子来说,就更重要了。如湖南的孩子说“我来自湖南”,由于方言影响就成了“我来自弗兰”。而这些人都不认为自己的读音是错误的,所以他听别人这样说的时候也认为是正确的。总之,如果我们平时的读音是错误的话,当听到正确读音时反而会不知道是哪个词,所以要想加强听力,首先要加强自己的读音。(党敏) | |||||
时尚 组图:10款艳丽泳装熟女穿出少女情怀导语:时下的泳装注重层次和线条感的悠闲设计,流露出自然的气质。 简洁的色彩搭配,甜美感觉凸显少女情怀,抽象概念化的异域花卉,颜色和谐、明快,印花纱裙,感觉轻盈,细致有女人味。 | |||||
时政 台“中选会”称12月5日选举时程不变新华网消息 据台联合晚报报道,台“中选会”上午如期召开幕僚选务会议,仍按原定12月5日举办“三合一”选举时程进行相关作业规划。“中选会”将在9月4日发布选举公告。基于考量莫拉克风灾灾后重建,以及H1N1疫情发烧,有部分蓝绿政治人物倡议延后年底“三合一”选举。据了解,到目前为止,年底“三合一”选举的相关选务作业仍如期进行。“中选会”表示,“中选会”是选务机关,是否延选,仍须由政策决定,在政策未改变前,“中选会”将依既定时程,规划年底“三合一”选举的相关选务作业。 | |||||
游戏 《天问》国家系统神秘美丽女儿国初探传说在遥远的西域,有一个神秘美丽的国家,上至国王,下至百姓,全国居民都是美丽温婉的女性。唐僧四师徒一路西行,就是来到了这个风光如画的女性之国。粉色帷幔随风飘扬,阳光照耀着的粉色砖墙闪闪发亮;清澈的泉水边,风情万种的女子们悠闲地编制精美的地毯,蝴蝶在花香中起舞……西梁女国就是一位端坐西域的温柔而美丽的少女,带着神秘的微笑注视来来往往的游客。解阳山是全新的练级场景, 山上微风吹拂,仙鹤悠闲地梳理着翎羽,处处透露平和安逸的气氛。但是山顶一座简陋的道观,竟藏着不少金银财宝?西梁女国百姓最珍视的一口泉水,也隐藏在道观山之上,这里到底隐藏着什么秘密?在解阳山上有一个神秘的副本波月洞,里面溶岩密布,石柱高耸,组成了各种美妙的景观。然而,波月洞盘踞着以毒蝎精领导的一群女妖,这帮妖精已与女儿国争战多年。当群侠得知毒蝎精近来甚至企图绑架女儿国太子,以要挟国王就范时,不论是出于怜香惜玉,还是英雄救美,一场的激烈的战争终将不可避免的开始了…… | |||||
科技 五彩时尚MP3 三星U5仅售299元 三星YP-U5(2GB)共有蓝、粉、白、红、黑五种时尚漂亮颜色可供选择。色彩感很浓烈。三星YP-U5(2GB)的背面还提供了一个背夹,再加上五颜六色的款式,使它看上去很像一个美发卡。机身很小巧,三围尺寸只有25×88×11.8mm,重量也只有23g,完全可以随身携带。在机身正面可以看到一个OLED冷光屏,显示的字体比较清晰。三星YP-U5(2GB)可以支持mp3、wma、ogg、Flac音频格式文件播放,此外,它支持三星最新的DNSe代3代音效,5种音效,提供自动、正常、工作室、摇滚、节奏及布鲁斯、舞厅、音乐厅7种选择,也可以进行自定义,对EQ和3D进行调节,效果非常好。除了出色的音乐播放功能以外,三星YP-U5(2GB)还支持FM收音机、歌词显示、MIC录音等功能。编辑点评:U系列是三星主打平价市场的产品,主要针对学生、办公室一族。相信这款音质出众、色彩绚丽的时尚MP3,也将为学生和年轻白领一族的个性生活增添亮丽色彩。 三星YP-U5(2GB) [参考价格] 299元 [联系方式] 13434155009 |
@@ -0,0 +1,9 @@ | |||||
体育 凯尔特人vs尼克斯前瞻III纽约背水战 甜瓜必杀令新浪体育讯北京时间4月23日上午7点,凯尔特人将迎移师纽约城,挑战尼克斯,这是两队首轮的第三次交锋。前两场比赛中,小斯和安东尼轮番打出现象级的表现,可惜都无法为尼克斯带来一场胜利。目前凯尔特人总比分2-0领先,对尼克斯而言,他们没有退路。“第三场在主场击败,这是一场必胜的战争,我们根本输不起,这是本赛季为止将要面临的最艰难的一场比赛。”安东尼说。然而运气却不在纽约这边,他们接连以小分差输掉两场,与此同时,比卢普斯和小斯又接连出现伤病,第三场比赛两人的状态仍旧未知,小斯缺席了球队的训练,他在第二场下半场因为背部痉挛休战,但小斯仍希望能够在第三场出战,比卢普斯则有膝伤在身,能否复出还要等赛前决定。第二场比赛中,比卢普斯休战,小斯下半场未打,比尔-沃克全场11投0中,但是尼克斯凭借安东尼的42分17个篮板6次助攻,顽强的将比赛拖到最后一秒,直到最后时刻杰弗里斯的传球被KG抢断,才遗憾落败。德安东尼说:“很遗憾他们两不能上场,但从积极方面看,下半场球队打出的顽强表现,让我们信心满满。”小斯在第一场拿到28分11个篮板,但是安东尼在那场饱受犯规困扰,18投5中只拿到15分,下半场11投1中,尼克斯最终85-87落败,纽约人相信,如果安东尼和小斯同时发挥,他们有很大机会扳倒绿巨人。“我想这是一种精神折磨,你知道自己打得有多努力,有多棒,但两次我们都距离胜利差之毫厘。”安东尼说。第三战将是尼克斯自从2004年4月25日以来,首次在麦迪逊广场花园首次举办季后赛,这座举世闻名的篮球麦加殿堂已有七年未曾染指季后赛。对凯尔特人而言,他们的进攻出现了不少问题,季后赛前两场分别是靠雷-阿伦和凯文-加内特的关键球才勉强击败对手。里弗斯表示,球队表现需要提高,奥尼尔第三场能否出战还是谜,雷-阿伦连续两场打出不俗表现,隆多则在第二场砍下30分7次助攻,他们将尼克斯的命中率限制到35.6%,但与此同时,他们也丢失了大量的防守篮板,上场比赛尼克斯抢下了20个进攻篮板,而凯尔特人只有9个。小斯曾在这轮系列赛中和格伦-戴维斯大打口水仗,此战重回纽约,尼克斯急需他的发挥,接下来就看小斯带伤出战,能为尼克斯提供多少支援了。两队预计首发:凯尔特人:隆多、阿伦、皮尔斯、加内特、小奥尼尔尼克斯:道格拉斯、菲尔德斯、图里亚夫、安东尼、小斯(木瓜丁) | |||||
娱乐 独家探班李康生蔡明亮短片《自转》(组图)新浪娱乐讯蔡明亮(阿亮)导演、李康生(小康)演出的银幕组合让两人在国际影坛挣出一席地位,如今两人“角色互换”!李康生执导台湾公视《台北异想》影片中的短片──《自转》,请出已20年没站在镜头前的蔡明亮当演员,阿亮为了爱徒再次“下海”演戏,没想到自称对演员施以爱的教育的小康,拍第一场戏就让阿亮吃了18次NG,现场更放催泪音乐,让感情丰富的阿亮流下真情的眼泪。台湾公视的《台北异想》影片,概念将一天从清晨六点起分为八个时段,邀来李康生、郑芬芬、钮承泽、林靖杰等八位导演,拍摄八部十分钟短片,接力诠释24小时的台北故事。小康选了凌晨四时至六时的时段发挥,他说:“2006年,舞蹈家伍国柱、罗曼菲相继过世让我感触很深,蔡明亮拍摄电影《洞》时,罗曼菲担任舞蹈编排,她直率、认真的性格留给大家很深的印象。因此特别选择她凌晨四点多辞世的时段,拍摄《自转》,也希望将这部短片献给她。”蔡明亮自从20年前曾在电视单元剧中饰演乐团主唱后,即不再以演员身分现身萤光幕前,为了挺爱徒再站镜头前,阿亮坦言,剧中虽只需扮演自己,但被拍仍令他紧张,要不是近几年常受访,被媒体训练出减少对镜头的恐惧,不然他不会让自己名列演员名单中。被阿亮指导演戏惯了的小康,如何回过头来对恩师教戏?他虽说:“我让演员自由发挥,采取『爱的教育』!”但光是陆奕静炒咖啡豆,阿亮静坐咖啡厅一隅,这全剧第一个镜头就磨了十八次,现场播放雷光夏广播录音和林怀民舞作《挽歌》音乐,更催出阿亮的男儿泪,阿亮说:“我就是想到了罗曼菲,更感受到美好的事物都会消失,真想再看一次罗曼菲跳舞。”《自转》的最后一场戏,陆奕静衬着音乐转圈跳舞,阿亮也即兴起舞,但连两天熬夜赶戏体力透支,加上不停转圈,她拍到呕吐、阿亮则晕眩不止,小康却满意称赞:“这两人跳得不错嘛!”小康当导演,从第一场戏折腾演员到末场戏,堪称“有始有终”,蔡明亮笑说:“未来我还是选择继续当导演吧。”台湾特派记者郑伟柏/台北报导 声明:新浪网独家稿件,转载请注明出处。 | |||||
家居 打好算盘最省钱瓷砖选购法面对导购小姐的微笑更是心中打鼓:人家说的好像挺有道理,但会觉得说得越好,会不会上当啊,是不是有猫腻呢?本文从建筑卫生陶瓷角度来分析,其它建材选购原理也与之相差无几。瓷砖的选购很讲究,要知道瓷砖这玩意儿一旦铺上了要是再发现有问题,后果是很严重的!下面列出的几点问题是在装修前一定要想清楚的,这些问题往往决定了以后选择瓷砖的种类、规格、价位甚至家居的整体风格。1、到底铺什么?这个问题好像问得很白痴,但这却是最基本的,首先你得充分了解哪些空间适合用哪些瓷砖啊!其实这个问题的关键不是用什么铺地,而是各种材料该怎么搭配。比如:有些业主希望在客厅铺瓷砖,同时在卧室选择木地板,这样问题就产生了:如果客厅铺普通玻化砖,卧室铺强化复合地板,那么卧室与客厅就会存在3cm左右的高度差,这主要是由于强化地板下没有打龙骨造成的。那么是不是在卧室选择实木地板就行了呢?当然不是。通常实木地板由厂家安装都会使用3×2cm的龙骨,如果为了和客厅的瓷砖找平最好使用5×4cm规格的龙骨,但是各个地板厂商对于更换龙骨的服务条款可是不同的。所以要充分与业主沟通,毕竟我们的目的是要让业主满意,了解业主的最基本的要求,然后根据业主的原始思路,找出最合适的方案。如果业主希望选择地板与地砖混铺的方式,就一定要规划好,避免不必要的麻烦。下面介绍两种基本搭配方式:瓷砖+强化地板=铺地板的房间用水泥灰浆垫高3cm,瓷砖+实木地板=地板下采用5×4cm规格的龙骨。2、选择什么规格的地砖?是铺600的?800的?还是1000的或是其它规格的?这是一个问题!现在的地砖,尤其是客厅使用的地砖主要是500mm、600mm、 800mm和1000mm(即1米)等规格,其中使用最多的是600mm和800mm两种。那么该如何选择呢?建议根据铺贴的面积及家具的摆放进行选择。由于单位面积中600mm的砖比800mm的砖铺贴数量要多,所以视觉上能产生空间的扩张感,同时在铺贴边角时的废料率要低于800mm的砖,而空间大时铺800甚至1米规格的砖就显得大气。因此建议小于40平米的空间选择600mm规格的地砖;而大于40平米的空间则可以选择800mm或一米的地砖。值得注意的是,如果在房间中家具过多(如卧室),盖住大块地面时,最好也采用600mm的地砖。3、该铺怎样的砖?到底是选择铺怎样的砖呢?是仿古砖还是抛光砖?仿古砖自然、柔务,在复古风格、尤其是拼花上有着玻化砖无法比拟的优势。同时,由于表面釉层的保护,对于茶水、墨水甚至热烟头的抗污能力也优于玻化砖。但是玻化砖也并非一无是处。随着技术的发展,现在玻化砖表面玻化层的密实度、光洁度已经相当的高,不仅能够使居室显得更加亮堂,还决不会像釉面砖由于外力碰撞、摩擦产生釉面破损的现象。所以选择什么样的砖要根据你要体现的风格,要明亮、大气就选抛光砖,要自然、温馨就选仿古砖。建议居室空间、客厅如果采光相对有限选择玻化砖,而光线充足的客厅和和需防滑的厨房和卫生间地面,及阳台等可选择仿古砖或其它釉面砖。4、“微晶玉”、“微晶石”、“微晶钻”都是什么意思?很多人逛建材城最头疼的恐怕就是记录瓷砖的名字了。什么“微晶玉”、“微晶石”、“微晶钻”、“超炫石”、“聚晶玉”等等。其实大家根本没必要记住这些拗口的名字,它们描述的都是同一种东西——玻化砖,这些名字只是厂商为了区分产品的档次,进一步细化市场而使用的代号罢了。在选择时大家只要坚持自己的预算,尽量选择适合自己的产品就行了。微晶石表面很炫,但其硬度只有莫氏五度左右,不耐磨,不适于用在地面,比较适于用在外墙干挂。 | |||||
房产 迪拜危机启示录:空中楼阁迟早要倒塌美国拉斯维加斯,又一家奢侈至极的酒店在这个“罪恶之城”绽放。但此次,相较酒店豪华的各种天价服务和开幕典礼上的好莱坞群星璀璨外,似乎其幕后的主人更吸引人们的眼球--迪拜世界。仅仅一周前,迪拜世界这个名词牵动了世界每个角落的神经。11月25日,迪拜主权财富基金迪拜世界宣布,暂缓偿还债务。根据评级机构穆迪的估算,迪拜的债务预计接近1000亿美元。巨大的数额勾起了人们对去年雷曼兄弟倒闭以来那波汹涌澎湃的国际金融危机的回忆。汇丰、渣打、巴克莱、苏格兰皇家银行等在内的多家银行涉及在内。人们开始担心,我国是否也会因此受到波及。庆幸的是,国内几大商业银行随即申明表示,没有涉及迪拜世界、迪拜政府和其他相关迪拜主权基金及机构发行的债权。有所涉及的,比例也相当的小。记者致电多家研究所银行业分析师,均表示认为此事对国内银行业影响不大,目前没有特别关注。因此,公众的目光从银行投向了导致其债务根源的房地产业。迪拜世界的房产项目,现在已经成为了全世界最大的烂尾楼。而就在这债务问题凸显的时刻,其旗下的“重型”项目却闪亮登场。“城市中心”酒店的开幕,似乎使得地产行业最尴尬的一面展现在了公众眼中。反观我国的地产行业,近期拍卖地王频现,房屋交易价格再次飙升,种种迹象也让人们对其产生了许多担忧。有专家对记者表示,在高速成长时期,楼价和地价互相推动的背后,是资金的不断流入。在那些光鲜的大楼后被后默默支撑的是债券、贷款等各种负债工具。一个原本是沙漠中人口只有十几万的小城,在几乎没有任何实业的基础上,居然吸引了世界上各方的资金,建成了一个人口上百万的豪华都市。房地产市场的巨大利益诱惑在其中占据了重大的因素。不断高涨的楼市,加上免税的便利,使得国际游资疯狂涌入。在聚集了巨大资金后,其所投资的项目遍布世界,美国这次的拉斯维加斯“城市中心”项目,迪拜世界就砸了近50亿美元。这种推动与反推动作用,给予了人们一个璀璨的迪拜,但当问题暴露,留下的却是满目疮痍。“迪拜危机对我们而言更多的是警示作用。”中国社科院金融研究所中国经济评价中心主任刘煜辉在接受《证券日报》记者采访时如此表示。他认为,目前为止迪拜危机对我国银行业的影响不多,但由于有过全球金融危机的影响,心理上的波动是会有的。此外,刘煜辉还告诉记者,任何以过度负债支撑起来的价格上涨或资产泡沫都是需要高度警惕。因为一旦泡沫破裂,就会带来破坏性较强的连锁反应。相信通过这次迪拜危机的警示,国内更多的行业会关注本行业内的负债和泡沫,对于投机性行为和高风险项目将会更加冷静。我要评论 | |||||
教育 知名美国私立寄宿中学来华招生行程序号 学校 时间 地点 学校情况 1、北野山中学Northfield Mount Hermon School10月26日 星期三PM1:00 美丽园龙都美国教育部认可的示范型学校2、Cranbrook school10月27日 星期四AM8:40-10:20美丽园龙都每年本校学生的AP考试成绩都位列于全国成绩最好的学校之中3、The Storm King School10月29日 星期六PM4:30上海南京西路1515号嘉里中心1809室纽约州一所私立男女混合精英寄宿中学4、Villanova Preparatory School10月30日 星期日PM1:00-4:00虹桥万豪酒店美国唯一一所的男女混合寄宿制天主教教会学校5、Wyoming Seminary Upper School11月1日 星期二AM10:00香格里拉美国著名的百年贵族名校,也是美国东北部最古老的中学及大学预科学校6、胡桃山音乐学校Walnut Hill School11月2日 星期三PM1:00浦东香格里拉美国最古老的艺术高中7、弗莱堡学校Fryeburg Academy11月3日 星期四PM2:00-6:00上海南京西路1515号嘉里中心1809室一所独特的提供寄宿和走读学习的学校8、St.Johnsbury Academy11月8日 星期二AM9:00-12:00上海南京西路1515号嘉里中心1809室美国中学中拥有最棒校园的男女合校寄宿学校9、波特茅斯教会学校Portsmouth Abbey School11月8日 星期二PM1:00-3:00北京朝阳区建外SOHO,A座9层全国首屈一指的天主教混合住宿学校10、波特茅斯教会学校Portsmouth Abbey School11月15日 星期三PM1:00-4:00上海南京西路1515号嘉里中心1809室全国首屈一指的天主教混合住宿学校11、库欣高中Cushing Academy11月第三周待定美国最悠久男女合校寄宿中学之一12、West NottinghamAcademy11月19日 星期六PM2:00上海南京西路1515号嘉里中心1809室美国最早的学校,245年历史13、格瑞尔女子中学The Grier School11月26日 星期六PM9:45明天广场万豪历史悠久的著名女子寄宿学校14、萨菲尔德学院Suffield Academy11月30日 星期三 待定有170多年历史,是一所男女同校的私立中学15、威利斯顿 • 诺塞普顿中学The Williston Northampton School12月1日 星期四PM2:00-4:00上海南京西路1515号嘉里中心1809室学校以其优质的教学质量而闻名16、菲利普斯埃克塞特Philips Exeter Academy12月2日星期五PM6:30-8:30北京建国饭店牡丹厅(北京建国门外大街5号)“美国高中的哈佛” 、全美国最好的私立寄宿制高中17、菲利普斯埃克塞特Philips Exeter Academy12月3日星期六PM2:30-4:30上海浦东香格里拉浦江楼2层青岛厅“美国高中的哈佛” 、全美国最好的私立寄宿制高中18、菲利普斯埃克塞特Philips Exeter Academy12月5日星期一PM6:30-8:30浙江图书馆1楼文澜厅(杭州西湖区曙光路73号)“美国高中的哈佛” 、全美国最好的私立寄宿制高中19、坎特伯雷中学Canterbury School12月5日 星期一AM9:00-12:00 待定走读与寄宿都有的男女合校20、西城中学/威斯顿中学Westtown School12月5日 星期一AM9:00待定一所拥有205年悠远传统的中学21菲利普斯埃克塞特Philips Exeter Academy12月6日 星期二PM6:30-8:30广州天河区林和中路6号海肮威斯汀酒店5楼蓝厅“美国高中的哈佛” 、全美国最好的私立寄宿制高中22菲利普斯埃克塞特Philips Exeter Academy12月7日 星期三PM6:30-8:30深圳格兰云天酒店26楼云河厅(福田区深南中路3024号)“美国高中的哈佛” 、全美国最好的私立寄宿制高中23Cheshire Academy12月18日 星期日待定美国最早的传统寄宿中学24The Governor’s Academy待定待定美国最古老的寄宿高中之一25Peddie School待定待定著名的具有悠久历史的男女混合寄宿学校26Westover School待定待定美国著名的大学预备女子私立寄宿中学27Rabun Gap-Nacoochee School待定待定一所6-12年级的大学预备住宿走读中学28Ben Lippen School待定待定一所为学生提供大学准备课程的教会学院29George Stevens Academy待定待定一所拥有200多年历史的学校 | |||||
时尚 组图:纽约2011时装周 博主编辑街拍自成风景导语:纽约2011春夏时装秀正在如火如荼地进行着,打开任何时尚网站,你都可以看到这RUNWAY秀的图片,所以我不想在这里赘述了,反而我觉得秀场外这些赶赴现场的模特们和时尚博主以及时尚编辑的街拍更有意思。 | |||||
时政 台当局开放大陆银联卡在台刷卡消费中国台湾网7月16日消息 据台湾《联合报》报道,台当局“金管会”昨天发布修正“两岸金融业务往来许可办法”,开放大陆银联卡在台刷卡消费。最快9月初大陆民众就可以持银联卡在台刷卡消费,将可提高大陆游客赴台观光、消费意愿,并为台湾每年新增1000亿元(新台币,下同)刷卡商机。岛内银行也将可办理相关收单业务,对收单银行的手续费年收益至少可多出20亿元的贡献。报道称,台当局“金管会银行局副局长”萧长瑞表示,办法发布生效后,“金管会”就可开始受理岛内收单银行、联合信用卡中心等申请,台湾的联合信用卡中心也要跟大陆银联公司签约,估计最快9月初银联卡就可进入台湾。大陆银联卡赴台使用研议多时,消算等技术层面问题一直待克服,昨天“金管会”正式发布相关规定开放银联卡赴台,也代表技术面问题都已解决。根据“金管会”昨天发布的两岸金融业务往来许可办法第二条及第七条之一修正案,明定岛内信用卡业务机构经主管机关许可者,可以与银联公司从事信用卡或转帐卡的业务往来。主要包括银联卡在岛内刷卡消费的收单业务,以及交易授权与清算业务等两项。至于岛内银行发行银联卡的发卡业务则未开放。(高大林) | |||||
游戏 腾讯手游在线 《幻想西游》勇创新高根据腾讯QQ游戏中心2009年11月26日显示的在线数据,由腾讯和广州银汉联合运营的《幻想西游》再创新高,同时在线达到54336!54336同时在线一举打破之前的在线记录,创造手机游戏在线新高,这是《幻想西游》的光荣,也是手机游戏界的光荣!罗马不是一天建成的,《幻想西游》运营三年以前,开发组一直注重提升游戏品质和馈玩家,做属于玩家自己的游戏。这次创造在线人数新高,就是对开发组最高的褒奖。11月期间,《幻想西游》举行了“美在西游”系列活动吸引了数千美女玩家报名,6万多玩家参与了本次活动,掀起了11月的活动高潮。11月25日感恩节,开发组成员更是身怀感恩之心,化身GM来到游戏中倾听玩家的心声,并且心甘情愿地被玩家击败后奉上了感恩节礼物。12月将进入“美在西游”决赛阶段,广州银汉笑迎八方客,热情地邀请来自全国各地的美女玩家和跨服帮战优秀代表共聚羊城,共叙三年幻想情,畅谈西游未来路。《幻想西游》是根据名著《西游记》改编的手机网络游戏,具有操作简洁,界面美观,互动性好,娱乐性强的特点,营造出一个充满梦幻的西游世界。进入游戏:手机访问 http://3g.qq.com,选择游戏-网游-幻想手机官网 http://wap.01234.com.cn,选择快速进入 | |||||
科技 配18-135mm镜头 佳能7D国庆带票促销中(中关村在线数码影像行情报道)佳能EOS-7D是一款拥有1800万像素成像能力,每秒钟8张连怕性能,并具备高清摄像功能的单反相机。这款单反相机于上周登陆中关村市场,是目前APS-C规格单反中的旗舰机型。今天笔者在市场上了解到,配备有18-135mm防抖镜头的7D套机,价格为13800元带发票。EOS 7D实现了在约1800万有效像素的高画质下,高达约8张/秒的连拍速度。并搭载了高速智能的自动对焦系统等众多新功能。EOS 7D不仅达到了约1800万的有效像素,还实现了低噪点的精细图像表现。其搭载的CMOS图像感应器是佳能自行研发生产的产品。在提高像素感光度的同时,对像素内的晶体管进行了改良实现了更高的S/N(信噪)比。7D的常用ISO感光度为100-6400,扩展ISO感光度最高为12800。图像信号传输是在将单通道序列读取高速化的同时,采用8通道进行高速读取。与EOS 50D相比要快约1.3倍,实现了约8张/秒的高速连拍。另外,对更换镜头时以及反光镜、快门等动作时产生的感应器灰尘也采用了相应的综合除尘措施;同时还搭载了可从相机硬件和附带软件两方面进行除尘的“EOS综合除尘系统”,在除尘功能上考虑得十分周到。快门单元和机身盖采用了不易产生碎屑的特殊材料;即便是不小心进入了灰尘,也可以通过超声波使图像感应器最前面的低通滤镜产生振动将灰尘抖落。低通滤镜表面进行了氟涂层处理,不论是对难以脱落的具有较高粘度的灰尘还是潮湿的灰尘都有着很好的除尘效果。双DIGIC 4数字影像处理器实现了对通过8个通道从图像感应器中高速读取出的,具有约1800万像素的庞大数据的迅速且高精度处理。搭载了2个高性能数字影像处理器DIGIC 4,能够对各种数据进行并行处理,即使是约1800万有效像素也可以实现最高约8张/秒连拍的高速图像处理。EOS 7D搭载了多达19个的自动对焦点,并且提高了每个对焦点的对焦精度。19个对焦点全部采用对应F5.6光束的十字型自动对焦感应器。将用于检测纵向线条的横向线型自动对焦感应器与用于检测横向线条的纵向线型自动对焦感应器呈十字型排列,从而实现了很高的被摄体捕捉能力。中央对焦点在相对于F5.6光束十字型自动对焦感应器的斜方向上配置了对应F2.8光束精度更高的十字型自动对焦感应器。通过中央八向双十字自动对焦感应器的协同工作,实现了高速且高精度的合焦。追踪被摄体的人工智能伺服自动对焦功能也在EOS 7D上得到了大幅的进化。EOS 7D的光学取景器具有约100%的视野率和约1倍(100%)的放大倍率,同时具有29.4°的视角和22毫米的眼点,其光学性能在历代EOS单反相机中也名列前茅。通过视野率约100%的光学取景器观察到的范围与实际拍摄的范围基本一致,因此能够得到非常精确的构图。此外,EOS 7D还在光学取景器内搭载了具有背透型液晶面板的“智能信息显示光学取景器”,它能够在对焦屏上显示网格线和三维电子水准仪等内容。EOS 7D的机身外壳采用了重量轻,刚性高且具有电磁屏蔽效果的镁合金材料。表面涂层采用了与EOS数码单反相机中顶级的EOS-1D系列相同的涂层材料及工艺。此外,EOS 7D还具有防水滴防尘构造,镁合金的外部部件变为高精度接缝构造,电池仓、存储卡插槽盖以及各操作按钮周围等都采用了密封部件,来保护相机的内部。EOS 7D背面的液晶监视器采用了具有160°的广视角(上下左右方向)及高清晰的92万点新型液晶监视器——“3.0"清晰显示液晶监视器II型”,其内部构造也经过重新研发,采用了新技术。7D机身上分别设置了专用的“实时显示/短片拍摄开关 ”和相应的“开始/停止按钮 ”,并且短片拍摄时能够在手动模式下对曝光进行控制。此外,可实现每秒30/25/24帧,分辨率1920×1080像素的全高清短片拍摄,在使用高清画质(分辨率1280×720像素)及标清画质(分辨率640×480像素)时,能够以每秒60/50帧进行拍摄。编辑观点:佳能7D的出现,再一次丰富了E0S产品系列中APS-C规格单反的阵营。佳能也终于有了可以和尼康D300级别单反正面对抗的产品。而出色的性能表现,不论是摄影爱好者还是专业人士,都会对其青睐有加。而上市价格也比较合理,只是希望7D不要重蹈5D II缺货涨价的覆辙。 |
@@ -0,0 +1,7 @@ | |||||
label text | |||||
1 多谢小莲,好运满满[爱你] | |||||
1 能在他乡遇老友真不赖,哈哈,珠儿,我也要用这个拼图软件!BTW,小飞人儿终于要飞回家啦,深圳行,谢谢每位工作人员的照顾![爱你] | |||||
0 [衰]补鞋的说鞋子是进口的,质量太好,刀子都切不进去!所以说大家以后别买进口,到时补都没的补![爱你] | |||||
0 第五季都没看了[泪]要补起来 | |||||
1 美图好诗![鼓掌] //@言家楼:回复@俺叫老鬼:【七律。感时】 叶随风舞身何处, 鸟逆风行觅树梢。 岁月风来无退路, 激流风助有波涛。 寒微风动曾言志, 富贵风骚似不牢。 雪竹风梅诗未尽, 休云风雨剪春刀。//鸢肩格:藏珠“风”。 | |||||
0 没敢问,她男朋友在旁边呢。。[泪]//@好饭换坏饭: 你问问她能不能调成静音模式 |
@@ -0,0 +1,8 @@ | |||||
label text | |||||
1 钟爱大粉的亲们,这一茬我们又种大粉了,座果也不错,能吃上了[嘻嘻] | |||||
0 //@北京全攻略: 我擦。。。牛逼~果断收藏[衰] | |||||
1 都有我都有我~~~我的2012注定是美美的精彩的不得了啊~哈哈哈[太开心]//@哆啦胖兔梦: 转发微博。 | |||||
1 这周的成果就是这样 刻的好累但是很喜欢[嘻嘻]#我的橡皮章# | |||||
1 你把我整?了。[抓狂] //@窦智耀:开 往大稿艺术区店开 带上祝贺的花篮。。。昨夜 杨家火锅 你把我灌醉。。。今夜 我要学会排队等位。再贺开业大吉![鼓掌][鼓掌][鼓掌] | |||||
1 [爱你]亲们,我刚刚发表了一篇文章,有图有真相,速来围观![围观]||#蚂蜂窝游记#《新疆,雨中的野核桃沟》,查看更多精彩>>> http://t.cn/zR4BMN3 (分享自 @蚂蜂窝旅游攻略) | |||||
0 [泪]//@平安北京: 珍爱生命,小心驾驶,驾车时请勿接打电话! |
@@ -0,0 +1,7 @@ | |||||
label text | |||||
1 //@实用小百科:这才是吃货本色[哈哈] | |||||
0 回复@邋遢大王诗文:好的[ok] //@邋遢大王诗文:回复@静冈叔叔:[ok]木有问题!回来了和我联系 //@静冈叔叔:回复@西瓜叫高荔蜒啊:在富士山静冈机场有很多小丸子的土产啊[嘻嘻] //@西瓜叫高荔蜒啊:祝你一路顺风~ 想要小丸子的お土?~[泪] | |||||
1 我花了两年最后被抢的只剩下一枚,情何以堪! //@自由橙的小窝:@程诗然 同学集卡速度最快,我花了两年时间才集全 //@怯弱的狮子Susan: 回复@阮导:@墙墙-墙根俱乐部 看你多抢手!快给我们各发一套吧![嘻嘻] //@阮导:回复@怯弱的狮子Susan:所以。。。。你要给我找一套撒。。哈哈哈哈哈!!! | |||||
1 KIMSCLOSET的年会,海鲜自助餐,太丰盛了!大家吃的HIGH,喝的HIGH,聊的HIGH!太开心了![哈哈][爱你] | |||||
1 在iPhone的便携鱼眼镜头之下,扣肉蝴蝶饱子显得多诱人呀![围观][馋嘴][嘻嘻] | |||||
0 英织,你知道不知道,他是我最最最爱的大叔,你跟他靠这么近,我的心都碎了!!!你说你说你说,你有没有他的签名![泪] |
@@ -0,0 +1,7 @@ | |||||
language gold_label sentence1_binary_parse sentence2_binary_parse sentence1_parse sentence2_parse sentence1 sentence2 promptID pairID genre label1 label2 label3 label4 label5 sentence1_tokenized sentence2_tokenized match | |||||
zh neutral 他说,妈妈,我回来了。 校车把他放下后,他立即给他妈妈打了电话。 1 1 facetoface neutral contradiction neutral neutral neutral 他 说 , 妈妈 , 我 回来 了 。 校车 把 他 放下 后 , 他 立即 给 他 妈妈 打 了 电话 。 True | |||||
zh contradiction 他说,妈妈,我回来了。 他没说一句话。 1 2 facetoface contradiction contradiction contradiction contradiction contradiction 他 说 , 妈妈 , 我 回来 了 。 他 没 说 一 句 话 。 True | |||||
zh entailment 他说,妈妈,我回来了。 他告诉他的妈妈他已经回到家了。 1 3 facetoface entailment entailment neutral entailment entailment 他 说 , 妈妈 , 我 回来 了 。 他 告诉 他 的 妈妈 他 已经 回到家 了 。 True | |||||
zh neutral 他们停止了跟这家交朋友,因为他们决定了当白人。 种族紧张局势开始时,他们不再探望这家人。 13 39 facetoface neutral entailment entailment entailment entailment 他们 停止 了 跟 这家 交朋友 , 因为 他们 决定 了 当 白人 。 种族 紧张 局势 开始 时 , 他们 不再 探望 这家 人 。 False | |||||
zh contradiction 老太太以前常说她姐姐和姐丈是如何决定要搬到奥古斯塔城里去,并且被当做白人看待。 奶奶的妹妹是白人,搬到了德克萨斯州。 17 49 facetoface contradiction contradiction contradiction contradiction neutral 老太太 以前 常 说 她 姐姐 和 姐丈 是 如何 决定 要 搬 到 奥古斯塔 城里 去 , 并且 被 当做 白人 看待 。 奶奶 的 妹妹 是 白人 , 搬 到 了 德克萨斯州 。 True | |||||
zh entailment 老太太以前常说她姐姐和姐丈是如何决定要搬到奥古斯塔城里去,并且被当做白人看待。 奶奶的姐姐不是白人。 17 50 facetoface entailment entailment contradiction neutral entailment 老太太 以前 常 说 她 姐姐 和 姐丈 是 如何 决定 要 搬 到 奥古斯塔 城里 去 , 并且 被 当做 白人 看待 。 奶奶 的 姐姐 不 是 白人 。 True |
@@ -0,0 +1,7 @@ | |||||
language gold_label sentence1_binary_parse sentence2_binary_parse sentence1_parse sentence2_parse sentence1 sentence2 promptID pairID genre label1 label2 label3 label4 label5 sentence1_tokenized sentence2_tokenized match | |||||
zh contradiction 嗯,我根本没想过,但是我很沮丧,最后我又和他说话了。 我还没有和他再次谈论。 2 4 facetoface contradiction contradiction contradiction contradiction contradiction 嗯 , 我 根本 没 想 过 , 但是 我 很 沮丧 , 最后 我 又 和 他 说话 了 。 我 还 没有 和 他 再次 谈论 。 True | |||||
zh entailment 嗯,我根本没想过,但是我很沮丧,最后我又和他说话了。 我非常沮丧,我刚刚开始跟他说话。 2 5 facetoface entailment entailment entailment entailment entailment 嗯 , 我 根本 没 想 过 , 但是 我 很 沮丧 , 最后 我 又 和 他 说话 了 。 我 非常 沮丧 , 我 刚刚 开始 跟 他 说话 。 True | |||||
zh neutral 嗯,我根本没想过,但是我很沮丧,最后我又和他说话了。 我们谈得很好。 2 6 facetoface neutral neutral neutral neutral neutral 嗯 , 我 根本 没 想 过 , 但是 我 很 沮丧 , 最后 我 又 和 他 说话 了 。 我们 谈 得 很 好 。 True | |||||
zh neutral 而我当初认为这是一个特权,我现在仍然这样想,我是唯一的922 Ex-O,也是我的AFFC空军职业生涯。 我不知道那天我不是唯一一个在场的人。 3 7 facetoface neutral contradiction contradiction contradiction contradiction 而 我 当初 认为 这 是 一个 特权 , 我 现在 仍然 这样 想 , 我 是 唯一 的 922 Ex-O , 也 是 我 的 AFFC 空军 职业生涯 。 我 不 知道 那天 我 不 是 唯一 一个 在场 的 人 。 False | |||||
zh contradiction 而我当初认为这是一个特权,我现在仍然这样想,我是唯一的922 Ex-O,也是我的AFFC空军职业生涯。 我们都被赋予了相同的确切数字,无论我们被许诺了何种特权,都是谎言。 3 9 facetoface contradiction contradiction entailment contradiction contradiction 而 我 当初 认为 这 是 一个 特权 , 我 现在 仍然 这样 想 , 我 是 唯一 的 922 Ex-O , 也 是 我 的 AFFC 空军 职业生涯 。 我们 都 被 赋予 了 相同 的 确切 数字 , 无论 我们 被 许诺 了 何种 特权 , 都 是 谎言 。 True | |||||
zh entailment 这是Fannie Flono,她在佐治亚州奥古斯塔长大,她会讲述她童年时的一些故事。 Fannie Flono就在这里,她将与我们分享她在奥古斯塔成长的童年故事。 12 35 facetoface entailment entailment entailment entailment entailment 这 是 Fannie Flono , 她 在 佐治亚州 奥古斯塔 长大 , 她 会讲 述 她 童年 时 的 一些 故事 。 Fannie Flono 就 在 这里 , 她 将 与 我们 分享 她 在 奥古斯塔 成 长 的 童年 故事 。 True |
@@ -0,0 +1,8 @@ | |||||
premise hypo label | |||||
我们 家里 有 一个 但 我 没 找到 我 可以 用 的 时间 我们 家里 有 一个 但 我 从来 没有 时间 使用 它 . entailment | |||||
该镇 仍然 充满 雕塑家 , piazza alberica 是 一个 夏季 雕塑 比赛 的 现场 14 天 来 制作 一个 杰作 . 几乎 所有 的 雕塑家 都 离开 了 piazza alberica 为 其他 城市 . contradictory | |||||
土耳其 的 面包车 是 自己 坐 下 来 的 , 但 他们 喜欢 玩和呃 , 他们 喜欢 和 他们 一起 玩 , 他们 把 他们 的 社会 从 它 . neutral | |||||
好 吗 ? 我 问 benignantly , 因为 她 犹豫 了 . 我 抓住 她 的 胳膊 和 她 愤怒地 , 问 , 好 吗 ? contradictory | |||||
一 段 时间 来 看 , 这 一 运动 似乎 要 取得 成功 , 但 政治 事件 , 加 上 帕内尔 在 一个 令 人 愤慨 的 离婚案 中 被 称为 共同 答辩人 , 导致 许多 人 撤回 他们 的 支持 . 帕内尔 在 一个 令 人 愤慨 的 离婚 问题 上 的 法律 问题 使 这 场 运动 受到 了 影响 . entailment | |||||
看 在 这里 , 他 说 我们 不 希望 任何 律师 混在 这 一 点 . 他 说 看看 那 张 纸 neutral | |||||
Soderstrom 在 创伤 中心 进行 了 多次 筛选 测试 . 测试 必须 在 创伤 中心 进行 比较 , 否则 就 会 无效 . neutral |
@@ -0,0 +1,6 @@ | |||||
時間 : | |||||
三月 十日 ( 星期四 ) 上午 十時 。 | |||||
並 辦理 加州 大學 退休 等 手續 。 | |||||
包括 一九七八年 獲有 數學 諾貝爾 之 稱 的 費爾茲獎 , | |||||
在 台大 的 四 年 裡 , | |||||
他 語重心長 的 勉勵 同學 們 一 番 話 , |
@@ -0,0 +1,6 @@ | |||||
許多 社區 長青 學苑 多 開設 有 書法 、 插花 、 土風舞班 , | |||||
文山區 長青 學苑 則 有 個 十分 特別 的 「 英文 歌唱班 」 , | |||||
成員 年齡 均 超過 六十 歲 , | |||||
這 群 白髮蒼蒼 , | |||||
爺爺 、 奶奶級 的 學員 唱起 英文 歌 來 字正腔圓 , | |||||
有模有樣 。 |
@@ -0,0 +1,6 @@ | |||||
地點 : | |||||
學術 活動 中心 一樓 簡報室 。 | |||||
主講 : | |||||
民族所 所長 莊英章 先生 。 | |||||
講題 : | |||||
閩 、 台 漢人 社會 研究 的 若干 考察 。 |
@@ -0,0 +1,6 @@ | |||||
立會 選情 告一段落 民主 進程 還 看 明天 | |||||
所謂 「 左 」 的 勢力 , 是 指 以 鄭經翰 、 梁國雄 ( 長毛 ) 為 代表 的 激進 民主 勢力 , 他們 尖銳 批評 中央 和 特區 政府 , 積極 為 基層 勞工 爭取 福利 , 可能 會 為 民主派 與 中央 和解 增加 困難 , 牽制 民主黨 走 中產 溫和 路線 。 | |||||
特區 政府 應該 積極 與 民主派 改善 關係 , 尤其 要 爭取 中間 及 「 右 」 翼 的 民主 勢力 , 因為 這些 人 背後 反映 的 是 香港 的 主流 民意 , 除了 民主 步伐 和 涉及 中央 的 敏感 政治 議題 , 他們 和 建制派 的 溫和 力量 沒有 基本 不同 , 很 容易 達成 跨 黨派 的 共識 , 令 特區 政府 處於 不得不 從 的 被動 位置 , 23 條 立法 撤回 、 追究 SARS 責任 等 , 都 是 記憶猶新 的 例子 。 | |||||
為 何秀蘭 喝彩 為 香港 人 神傷 | |||||
單說 立法會 , 自 91 年 以來 , 經歷 5 次 類似 的 地區 直選 。 | |||||
點票 過程 出現 的 笑話 更 多 。 |
@@ -0,0 +1,6 @@ | |||||
「 練 得 銅皮鐵骨 」 露宿 早 慣 蚊叮 | |||||
本 港 約 有 450 至 600 名 露宿者 , 其中 近 四分之一 , 即 約 150 人 露宿 在 深水埗 。 | |||||
有 外展 社工 稱 , 露宿者 日間 多 到 商場 等 冷氣 場所 避暑 , 流連 至 晚上 11 、 12 時 , 才 用 紙皮 在 公園 外 「 打地鋪 」 , 他們 早已 「 練 得 一 身 銅皮鐵骨 」 , 徹夜 被 蚊 叮 也 習以為常 , 但 社工 在 炎夏 仍 會 頻頻 給 他們 派發 蚊香 。 | |||||
基督教 關懷 無家者 協會 的 外展 社工 , 過去 一直 有 探訪 李鄭屋 遊樂場 外 的 露宿者 , 該 會 總幹事 賴淑芬 說 , 該 處 的 露宿者 只 有 數 人 , 且 流動性 很 大 。 | |||||
不管 被 多少 蚊 叮 也 沒 什 感覺 | |||||
她 指 這些 露宿者 日間 都 會 流連 於 冷氣 場所 , 晚上 才 到 遊樂場 露宿 , 但 礙於 遊樂場 晚上 關門 , 他們 只 可 在 外圍 「 打地鋪 」 。 |
@@ -0,0 +1,6 @@ | |||||
立法會 選舉 出現 了 戲劇性 的 結果 , 儘管 投票率 創下 新高 , 而 過去 經驗 顯示 高 投票率 對 民主派 較 有利 , 但 由於 名單 協調 不當 及 配票 策略 失誤 , 加上 醜聞 影響 選情 , 民主黨 的 議席 比 上 一 屆 減少 , 由 第 一 大 黨 跌 至 第 三 ; | |||||
而 泛民主派 在 30 席 普選 中 亦 只能 取得 18 席 , 比 選前 預期 的 20 席 少 ; | |||||
但 在 功能 組別 選舉 卻 有 意外 收穫 , 除 保住 原有 的 5 個 議席 , 還 搶佔 了 醫學 和 會計 兩 個 專業 界別 , 令 議席 總數 達到 25 席 , 比 上 一 屆 多 了 3 席 。 | |||||
更 值得 注意 的 是 , 泛民主派 候選人 在 普選 中 合共 取得 110萬 張 選票 , 佔 178萬 選票 總數 的 62 % , 顯示 多數 市民 認同 早日 實現 全面 普選 的 民主 訴求 , 這 一 點 應 為 政府 及 各 黨派 人士 所 尊重 。 | |||||
須 為 2012 全面 普選 創造 條件 | |||||
親 建制 陣營 方面 , 民建聯 和 自由黨 都 取得 佳績 , 分別 取得 12 席 和 11 席 , 成為 立法會 內 的 第 一 及 第 二 大 黨 。 |
@@ -0,0 +1,6 @@ | |||||
在 十五大 精神 指引 下 胜利 前进 —— 元旦 献辞 | |||||
我们 即将 以 丰收 的 喜悦 送 走 牛年 , 以 昂扬 的 斗志 迎来 虎年 。 我们 伟大 祖国 在 新 的 一 年 , 将 是 充满 生机 、 充满 希望 的 一 年 。 | |||||
李 鹏 在 北京 考察 企业 | |||||
李 鹏 说 : “ 作为 首都 的 电力 工作者 , 你们 为 首都 的 各项 重大 活动 的 顺利 进行 , 为 保障 人民 群众 的 工作 、 生活 和 学习 , 为 促进 首都 经济 的 发展 作出 了 自己 的 贡献 。 明天 就 是 元旦 , 你们 还有 许多 同志 要 坚守 岗位 , 我 向 你们 、 向 全体 电力 工作者 表示 感谢 。 现在 , 我们 的 首都 已经 结束 了 拉 闸 限 电 的 历史 , 希望 依靠 大家 , 使 拉 闸 限 电 的 历史 永远 不再 重演 。 同时 , 也 希望 你们 安全 生产 、 经济 调度 , 实现 经济 增长 方式 的 转变 。 ” 李 鹏 最后 向 电业 职工 , 向 全 北京市 的 人民 拜年 , 向 大家 致以 新春 的 问候 , 祝愿 电力 事业 取得 新 的 成绩 , 祝愿 北京市 在 改革 、 发展 和 稳定 的 各项 工作 中 取得 新 的 成就 。 | |||||
( 附 图片 1 张 ) | |||||
据 介绍 , 播音员 、 主持人 持证 上岗 工作 , 是 在 1996年 全国 广播 影视 系统 语言 工作 会议 上 提 出来 的 , 它 是 加强 宣传 队伍 建设 , 促进 语言 文字 走向 标准化 、 规范化 的 重要 举措 。 播音员 、 主持人 只有 通过 汉语 普通话 水平 测试 和 政治 、 业务 考核 后 才 能 获得 上岗 资格 证书 。 |
@@ -0,0 +1,6 @@ | |||||
共同 创造 美好 的 新 世纪 —— 二○○一年 新年 贺词 | |||||
( 二○○○年 十二月 三十一日 ) ( 附 图片 1 张 ) | |||||
女士 们 , 先生 们 , 同志 们 , 朋友 们 : | |||||
2001年 新年 钟声 即将 敲响 。 人类 社会 前进 的 航船 就要 驶入 21 世纪 的 新 航程 。 中国 人民 进入 了 向 现代化 建设 第三 步 战略 目标 迈进 的 新 征程 。 | |||||
在 这个 激动人心 的 时刻 , 我 很 高兴 通过 中国 国际 广播 电台 、 中央 人民 广播 电台 和 中央 电视台 , 向 全国 各族 人民 , 向 香港 特别 行政区 同胞 、 澳门 特别 行政区 同胞 和 台湾 同胞 、 海外 侨胞 , 向 世界 各国 的 朋友 们 , 致以 新 世纪 第一 个 新年 的 祝贺 ! | |||||
过去 的 一 年 , 是 我国 社会主义 改革 开放 和 现代化 建设 进程 中 具有 标志 意义 的 一 年 。 在 中国 共产党 的 领导 下 , 全国 各族 人民 团结 奋斗 , 国民经济 继续 保持 较 快 的 发展 势头 , 经济 结构 的 战略性 调整 顺利 部署 实施 。 西部 大 开发 取得 良好 开端 。 精神文明 建设 和 民主 法制 建设 进一步 加强 。 我们 在 过去 几 年 取得 成绩 的 基础 上 , 胜利 完成 了 第九 个 五年计划 。 我国 已 进入 了 全面 建设 小康 社会 , 加快 社会主义 现代化 建设 的 新 的 发展 阶段 。 |
@@ -0,0 +1,6 @@ | |||||
迈向 充满 希望 的 新 世纪 —— 一九九八年 新年 讲话 ( 附 图片 1 张 ) | |||||
中共中央 总书记 、 国家 主席 江 泽民 | |||||
( 一九九七年 十二月 三十一日 ) | |||||
12月 31日 , 中共中央 总书记 、 国家 主席 江 泽民 发表 1998年 新年 讲话 《 迈向 充满 希望 的 新 世纪 》 。 ( 新华社 记者 兰 红光 摄 ) | |||||
同胞 们 、 朋友 们 、 女士 们 、 先生 们 : | |||||
在 1998年 来临 之际 , 我 十分 高兴 地 通过 中央 人民 广播 电台 、 中国 国际 广播 电台 和 中央 电视台 , 向 全国 各族 人民 , 向 香港 特别 行政区 同胞 、 澳门 和 台湾 同胞 、 海外 侨胞 , 向 世界 各国 的 朋友 们 , 致以 诚挚 的 问候 和 良好 的 祝愿 ! |
@@ -15,7 +15,7 @@ class TestCWSLoader(unittest.TestCase): | |||||
class TestRunCWSLoader(unittest.TestCase): | class TestRunCWSLoader(unittest.TestCase): | ||||
def test_cws_loader(self): | def test_cws_loader(self): | ||||
dataset_names = ['msra'] | |||||
dataset_names = ['msra', 'cityu', 'as', 'msra'] | |||||
for dataset_name in dataset_names: | for dataset_name in dataset_names: | ||||
with self.subTest(dataset_name=dataset_name): | with self.subTest(dataset_name=dataset_name): | ||||
data_bundle = CWSLoader(dataset_name=dataset_name).load( | data_bundle = CWSLoader(dataset_name=dataset_name).load( | ||||
@@ -1,14 +1,13 @@ | |||||
import unittest | import unittest | ||||
from fastNLP.io import DataBundle | |||||
from fastNLP.io.loader.matching import RTELoader | |||||
from fastNLP.io.loader.matching import QNLILoader | |||||
from fastNLP.io.loader.matching import SNLILoader | |||||
from fastNLP.io.loader.matching import QuoraLoader | |||||
from fastNLP.io.loader.matching import MNLILoader | |||||
import os | import os | ||||
from fastNLP.io import DataBundle | |||||
from fastNLP.io.loader.matching import RTELoader, QNLILoader, SNLILoader, QuoraLoader, MNLILoader, \ | |||||
BQCorpusLoader, XNLILoader, LCQMCLoader | |||||
@unittest.skipIf('TRAVIS' in os.environ, "Skip in travis") | @unittest.skipIf('TRAVIS' in os.environ, "Skip in travis") | ||||
class TestMatchingDownload(unittest.TestCase): | class TestMatchingDownload(unittest.TestCase): | ||||
def test_download(self): | def test_download(self): | ||||
@@ -30,6 +29,9 @@ class TestMatchingLoad(unittest.TestCase): | |||||
'SNLI': ('test/data_for_tests/io/SNLI', SNLILoader, (5, 5, 5), False), | 'SNLI': ('test/data_for_tests/io/SNLI', SNLILoader, (5, 5, 5), False), | ||||
'QNLI': ('test/data_for_tests/io/QNLI', QNLILoader, (5, 5, 5), True), | 'QNLI': ('test/data_for_tests/io/QNLI', QNLILoader, (5, 5, 5), True), | ||||
'MNLI': ('test/data_for_tests/io/MNLI', MNLILoader, (5, 5, 5, 5, 6), True), | 'MNLI': ('test/data_for_tests/io/MNLI', MNLILoader, (5, 5, 5, 5, 6), True), | ||||
'BQCorpus': ('test/data_for_tests/io/BQCorpus', BQCorpusLoader, (5, 5, 5), False), | |||||
'XNLI': ('test/data_for_tests/io/XNLI', XNLILoader, (6, 7, 6), False), | |||||
'LCQMC': ('test/data_for_tests/io/LCQMC', LCQMCLoader, (5, 6, 6), False), | |||||
} | } | ||||
for k, v in data_set_dict.items(): | for k, v in data_set_dict.items(): | ||||
path, loader, instance, warns = v | path, loader, instance, warns = v | ||||
@@ -16,7 +16,7 @@ class TestCWSPipe(unittest.TestCase): | |||||
class TestRunCWSPipe(unittest.TestCase): | class TestRunCWSPipe(unittest.TestCase): | ||||
def test_process_from_file(self): | def test_process_from_file(self): | ||||
dataset_names = ['msra'] | |||||
dataset_names = ['msra', 'cityu', 'as', 'pku'] | |||||
for dataset_name in dataset_names: | for dataset_name in dataset_names: | ||||
with self.subTest(dataset_name=dataset_name): | with self.subTest(dataset_name=dataset_name): | ||||
data_bundle = CWSPipe().process_from_file(f'test/data_for_tests/io/cws_{dataset_name}') | data_bundle = CWSPipe().process_from_file(f'test/data_for_tests/io/cws_{dataset_name}') | ||||
@@ -3,8 +3,10 @@ import unittest | |||||
import os | import os | ||||
from fastNLP.io import DataBundle | from fastNLP.io import DataBundle | ||||
from fastNLP.io.pipe.matching import SNLIPipe, RTEPipe, QNLIPipe, MNLIPipe | |||||
from fastNLP.io.pipe.matching import SNLIBertPipe, RTEBertPipe, QNLIBertPipe, MNLIBertPipe | |||||
from fastNLP.io.pipe.matching import SNLIPipe, RTEPipe, QNLIPipe, MNLIPipe, \ | |||||
XNLIPipe, BQCorpusPipe, LCQMCPipe | |||||
from fastNLP.io.pipe.matching import SNLIBertPipe, RTEBertPipe, QNLIBertPipe, MNLIBertPipe, \ | |||||
XNLIBertPipe, BQCorpusBertPipe, LCQMCBertPipe | |||||
@unittest.skipIf('TRAVIS' in os.environ, "Skip in travis") | @unittest.skipIf('TRAVIS' in os.environ, "Skip in travis") | ||||
@@ -35,6 +37,9 @@ class TestRunMatchingPipe(unittest.TestCase): | |||||
'SNLI': ('test/data_for_tests/io/SNLI', SNLIPipe, SNLIBertPipe, (5, 5, 5), (110, 3), False), | 'SNLI': ('test/data_for_tests/io/SNLI', SNLIPipe, SNLIBertPipe, (5, 5, 5), (110, 3), False), | ||||
'QNLI': ('test/data_for_tests/io/QNLI', QNLIPipe, QNLIBertPipe, (5, 5, 5), (372, 2), True), | 'QNLI': ('test/data_for_tests/io/QNLI', QNLIPipe, QNLIBertPipe, (5, 5, 5), (372, 2), True), | ||||
'MNLI': ('test/data_for_tests/io/MNLI', MNLIPipe, MNLIBertPipe, (5, 5, 5, 5, 6), (459, 3), True), | 'MNLI': ('test/data_for_tests/io/MNLI', MNLIPipe, MNLIBertPipe, (5, 5, 5, 5, 6), (459, 3), True), | ||||
'BQCorpus': ('test/data_for_tests/io/BQCorpus', BQCorpusPipe, BQCorpusBertPipe, (5, 5, 5), (32, 2), False), | |||||
'XNLI': ('test/data_for_tests/io/XNLI', XNLIPipe, XNLIBertPipe, (6, 7, 6), (37, 3), False), | |||||
'LCQMC': ('test/data_for_tests/io/LCQMC', LCQMCPipe, LCQMCBertPipe, (5, 6, 6), (36, 2), False), | |||||
} | } | ||||
for k, v in data_set_dict.items(): | for k, v in data_set_dict.items(): | ||||
path, pipe1, pipe2, data_set, vocab, warns = v | path, pipe1, pipe2, data_set, vocab, warns = v | ||||
@@ -48,6 +53,9 @@ class TestRunMatchingPipe(unittest.TestCase): | |||||
self.assertTrue(isinstance(data_bundle1, DataBundle)) | self.assertTrue(isinstance(data_bundle1, DataBundle)) | ||||
self.assertEqual(len(data_set), data_bundle1.num_dataset) | self.assertEqual(len(data_set), data_bundle1.num_dataset) | ||||
print(k) | |||||
print(data_bundle1) | |||||
print(data_bundle2) | |||||
for x, y in zip(data_set, data_bundle1.iter_datasets()): | for x, y in zip(data_set, data_bundle1.iter_datasets()): | ||||
name, dataset = y | name, dataset = y | ||||
self.assertEqual(x, len(dataset)) | self.assertEqual(x, len(dataset)) | ||||
@@ -0,0 +1,41 @@ | |||||
import unittest | |||||
import torch | |||||
from fastNLP.modules.encoder.pooling import MaxPool, MaxPoolWithMask, KMaxPool, AvgPool, AvgPoolWithMask | |||||
class TestPooling(unittest.TestCase): | |||||
def test_MaxPool(self): | |||||
max_pool_1d = MaxPool(dimension=1) | |||||
x = torch.randn(5, 6, 7) | |||||
self.assertEqual(max_pool_1d(x).size(), (5, 7)) | |||||
max_pool_2d = MaxPool(dimension=2) | |||||
self.assertEqual(max_pool_2d(x).size(), (5, 1)) | |||||
max_pool_3d = MaxPool(dimension=3) | |||||
x = torch.randn(4, 5, 6, 7) | |||||
self.assertEqual(max_pool_3d(x).size(), (4, 1, 1)) | |||||
def test_MaxPoolWithMask(self): | |||||
pool = MaxPoolWithMask() | |||||
x = torch.randn(5, 6, 7) | |||||
mask = (torch.randn(5, 6) > 0).long() | |||||
self.assertEqual(pool(x, mask).size(), (5, 7)) | |||||
def test_KMaxPool(self): | |||||
k_pool = KMaxPool(k=3) | |||||
x = torch.randn(4, 5, 6) | |||||
self.assertEqual(k_pool(x).size(), (4, 15)) | |||||
def test_AvgPool(self): | |||||
pool = AvgPool() | |||||
x = torch.randn(4, 5, 6) | |||||
self.assertEqual(pool(x).size(), (4, 5)) | |||||
def test_AvgPoolWithMask(self): | |||||
pool = AvgPoolWithMask() | |||||
x = torch.randn(5, 6, 7) | |||||
mask = (torch.randn(5, 6) > 0).long() | |||||
self.assertEqual(pool(x, mask).size(), (5, 7)) |