Word2Vec
- Skip-gram
通过目标词汇来预测上下文。 如: 我 是 一名 合格 的 共产党员。 窗口设置为2,生成对(Pair[input, label])为: (是, 我), (一名, 我), | (我, 是), (一名, 是), (合格, 是), | (我, 一名), ...
- CBOW (Continuous bag of words)
上下文预测目标词汇
- 使用工具
pip install word2vec
import word2vec word2vec.word2vec('large_pre.dat', 'wordsVec.bin', size=300, verbose=True)
数据格式要求: 空格间隔每个词。 中文分词工具: jieba (pip)
评价词向量
```python model = word2vec.load(“wordsVec.bin”)
全部的单词
model.vocab
第几个单词
model.vocab[index]
词向量矩阵
model.vectors
获取最近的10(默认)个
indexs = model.cosine(“西瓜”) vocabs = [model.vocab[index] for index in indexs]
4. 其他工具
gensim fasttext glove …
5. 数据来源和预处理
— 搜狗实验室全网新闻数据 http://www.sogou.com/labs/resource/list_news.php — 编码转变和content抽取 由于默认为gbk编码,需要转换成Linux上的utf-8 cat data | iconv -f gbk -t utf-8 -c | grep </content> > utf8data
# FastText --- 文本分类
## 简介
可以训练词向量,可以进行有监督的文本分类,在训练过程中会自动训练词向量,也可以导入预训练的词向量,训练速度极快。 https://github.com/facebookresearch/fastText/archive/v0.1.0.zip
1. 入门
pip install fasttext # 不支持预处理词向量 github下载安装编译,通过CLI运行 数据通过空格分割,结尾是__label___(Yes) # Yes是标签名,前缀可自定义
2. python
import logging import fasttext logging.basicConfig(format=”%(asctime)s : %(levelname)s : %(message)s”, level=logging.INFO)
classifier = fasttext.supervised(“./yes_no_wellformat_train.stat”, “./yes_no_classified.model”, label_prefix=”label”, dim=300, epoch=2, word_ngrams=1, ws=10 )
result = classifier.test(“./yes_no_wellformat_dev.stat”) print(result.precision) print(result.recall) # 召回率 print(result.nexamples) print(classifier.predict_proba([‘对于 散 在 的 比较 小 的 宫颈 腺 囊肿 一般 不需 治疗 , 只要 每年 检查 即可 ; 对于 密集 的 较 小 的 纳氏囊肿 或 比较 大 的 囊肿 , 可 考虑 光疗 、 激光 、 微波 、 自凝 刀 等 物>理治疗 ; 对于 较 大 的 突出 于 宫颈 表面 的 , 可 考虑 电刀 切除 治疗 。’])) # 需要空格分开
3. CLI
./fasttext supervised -input yes_no_wellformat_train.stat -output model -dim 300 -pretrainedVectors vocab_emb.dict -epoch 2 -loss ns
4. 效果
* epoch 不宜太大
* 预处理词向量意义不大,具体应该和规模有关
* dim大一些有好处
5. Tips
* 预处理的词向量格式
单词数 维度 单词 数字(用空格分割)
可以通过减少精度来降低词向量占用的磁盘空间 ```