1. 词嵌入向量WordEmbedding
定义:
词嵌入向量(WordEmbedding)是NLP里面一个重要的概念,我们可以利用WordEmbedding将一个单词转换成固定长度的向量表示,从而便于进行数学处理。本质上降低维度处理
详见:https://www.jianshu.com/p/2a76b7d3126b
2. 分词Tokenization
2.1 定义
2.1.1 目标(Goal)
将文本切分成单词序列(divide text into a sequence of words),单词指的是一串连续的字母数字并且其两端有空格;可能包含连字符和撇号但是没有其它标点符号
2.1.2 Tokenizatioan 容易吗?
2.1.2.1 什么是词(What’s a word)?
i. English:
1. “Wash. vs wash”
2. “won’t”, “John’s”
3. “pro-Arab”, “the idea of a child-as-required-yuppie-possession must be motivating them”, “85-year-old grandmother”
ii. 东亚语言(East Asian languages):
1. 词之间没有空格(words are not separated by white spaces)
2.1.2.2 分词(Word Segmentation)
i. 基于规则的方法(Rule-based approach): 基于词典和语法知识的形态分析(morphological analysis based on lexical and grammatical knowledge)
ii. 基于语料库的方法(Corpus-based approach): 从语料中学习(learn from corpora(Ando&Lee, 2000))
iii. 需要考虑的问题(Issues to consider): 覆盖面,歧义,准确性(coverage, ambiguity, accuracy)
2.1.2.3 统计切分方法的动机(Motivation for Statistical Segmentation)
i. 未登录词问题(Unknown words problem):
——存在领域术语和专有名词(presence of domain terms and proper names)
ii. 语法约束可能不充分(Grammatical constrains may not be sufficient)
——例子(Example): 名词短语的交替切分(alternative segmentation of noun phrases)
iii. 举例一
1. Segmentation:sha-choh/ken/gyoh-mu/bu-choh
2. Translation:“president/and/business/general/manager”
iv. 举例二
1. Segmentation:sha-choh/ken-gyoh/mu/bu-choh
2. Translation:“president/subsidiary business/Tsutomi[a name]/general manag
2.2 标记化
默认情况下,OpenNMT-tf 需要并生成分词文本。因此,用户负责对输入进行分词,并使用他们选择的工具使输出无效。
但是,OpenNMT-tf提供了基于C ++ OpenNMT Tokenizer的分词工具,可以通过两种方式使用:
offline:使用提供的脚本在执行前手动对文本文件进行分词,并将输出解除声明以进行评估
online:配置执行以即时应用分词和去分词
注意:该pyonmttok软件包仅在Linux上受支持。
2.3 配置文件
YAML文件用于设置分词器选项,以确保数据准备和培训期间的一致性。例如,此配置使用OpenNMT分词器在简单的基于单词的标记化中定义:
mode: aggressive
joiner_annotate: true
segment_numbers: true
segment_alphabet_change: true
有关可用选项的完整列表,请参阅Tokenizer文档。
2.4 离线使用
您可以onmt-tokenize-text直接调用脚本并传递tokenizer配置:
echo "Hello world!" | onmt-tokenize-text --tokenizer_config config/tokenization/aggressive.yml
Hello world ■!
2.5 在线使用
在线使用一个关键特性是在训练期间即时分词。这样可以避免分词文件的需要,还可以提高预处理管道的一致性。这是一个示例工作流程:
1.使用自定义分词器构建词汇表,例如:
onmt-build-vocab --tokenizer_config config/tokenization/aggressive.yml --size 50000 --save_vocab data/enfr/en-vocab.txt data/enfr/en-train.txt
onmt-build-vocab --tokenizer_config config/tokenization/aggressive.yml --size 50000 --save_vocab data/enfr/fr-vocab.txt data/enfr/fr-train.txt
文本文件仅作为示例提供,不属于存储库。
- 在数据配置中引用tokenizer配置,例如:
data:
source_tokenization: config/tokenization/aggressive.yml
target_tokenization: config/tokenization/aggressive.yml