德语词嵌入
关于英语语料库词嵌入训练的研究已有很多。这个工具包通过gensim的word2vec对德语语料库应用深度学习,以训练和评估德语语言模型。项目概述、评估结果和下载链接可以在项目网站或直接在本仓库中找到。
本项目基于MIT许可证发布。
开始使用
确保您已安装Python 3以及以下库:
pip install gensim nltk matplotlib numpy scipy scikit-learn
现在您可以下载word2vec_german.sh
并在shell中执行,以自动下载此工具包和相应的语料库文件,并进行模型训练和评估。请注意,这可能需要大量时间!
您也可以克隆此仓库并使用我已经训练好的模型来尝试评估和可视化。
如果您只想了解不同Python脚本的工作原理,请查看代码目录以查看Jupyter Notebook脚本输出示例。
获取语料库
有多种方法可以获取公开可用且免费使用的大型德语语料库:
德语维基百科
wget https://dumps.wikimedia.org/dewiki/latest/dewiki-latest-pages-articles.xml.bz2
统计机器翻译
2007年至2013年的随机德语新闻:
for i in 2007 2008 2009 2010 2011 2012 2013; do
wget http://www.statmt.org/wmt14/training-monolingual-news-crawl/news.$i.de.shuffled.gz
done
使用此工具包训练的模型基于德语维基百科和2013年的德语新闻。
预处理
该工具使用WikipediaExtractor(Giuseppe Attardi的Python脚本,用于过滤Wikipedia XML转储,基于GPLv3许可)和一些shell指令来预处理原始的维基百科XML语料库,以过滤所有XML标签和引号:
wget http://medialab.di.unipi.it/Project/SemaWiki/Tools/WikiExtractor.py
python WikiExtractor.py -c -b 25M -o extracted dewiki-latest-pages-articles.xml.bz2
find extracted -name '*bz2' \! -exec bzip2 -k -c -d {} \; > dewiki.xml
sed -i 's/<[^>]*>//g' dewiki.xml
sed -i 's|["'\''„"‚']||g' dewiki.xml
rm -rf extracted
德语新闻已经包含每行一个句子,没有任何XML语法开销。只需要删除引号:
for i in 2007 2008 2009 2010 2011 2012 2013; do
gzip -d news.$i.de.shuffled.gz
sed -i 's|["'\''„"‚']||g' news.$i.de.shuffled
done
之后,可以使用以下选项在这些语料库文件上调用 preprocessing.py
脚本:
标志 | 默认值 | 描述 |
---|---|---|
-h, --help | - | 显示帮助信息并退出 |
-p, --punctuation | False | 过滤标点符号标记 |
-s, --stopwords | False | 过滤停用词标记 |
-u, --umlauts | False | 将德语变音替换为相应的二合字母 |
-b, --bigram | False | 检测并处理常见的二元词组 |
-t [ ], --threads [ ] | 处理器数量 | 工作线程数 |
--batch_size [ ] | 32 | 句子处理的批处理大小 |
使用示例:
python preprocessing.py dewiki.xml corpus/dewiki.corpus -psub
for file in *.shuffled; do python preprocessing.py $file corpus/$file.corpus -psub; done
训练模型
使用 training.py
脚本训练模型,可选参数如下:
标志 | 默认值 | 描述 |
---|---|---|
-h, --help | - | 显示此帮助信息并退出 |
-s [ ], --size [ ] | 100 | 词向量的维度 |
-w [ ], --window [ ] | 5 | 滑动窗口的大小 |
-m [ ], --mincount [ ] | 5 | 考虑一个词的最小出现次数 |
-t [ ], --threads [ ] | 处理器数量 | 用于训练模型的工作线程数 |
-g [ ], --sg [ ] | 1 | 训练算法:Skip-Gram (1),否则CBOW (0) |
-i [ ], --hs [ ] | 1 | 使用层次采样进行训练 |
-n [ ], --negative [ ] | 0 | 使用负采样进行训练(通常在5-20之间) |
-o [ ], --cbowmean [ ] | 0 | 对于CBOW训练算法:使用和(0)或平均值(1)合并上下文向量 |
使用示例:
python training.py corpus/ my.model -s 200 -w 5
请注意,第一个参数是一个目录,其中包含的每个文件都将被视为训练的语料库文件。
如果需要测量并存储训练模型所需的时间,可以使用以下命令:
{ time python training.py corpus/ my.model -s 200 -w 5; } 2>> my.model.result
词汇表
要计算给定语料库的词汇表,可以使用 vocabulary.py
脚本:
python vocabulary.py my.model my.model.vocab
评估
要创建测试集并评估训练好的模型,可以使用 evaluation.py
脚本。可以评估训练模型的语法和语义特征。为了成功创建测试集,在启动脚本之前应该创建以下源文件(有关更多信息,请参见脚本中的配置部分)。
语法测试集
通过语法测试,可以评估单数、复数、第三人称、过去时、比较级或最高级等特征。因此有3个源文件:形容词、名词和动词。每个文件每行包含一个唯一的词及其变位形式,用破折号分隔。这些组合模式可以在脚本配置中的 PATTERN_SYN
常量中输入。脚本现在根据给定的模式将每个词与5个随机的其他词组合,以创建适当的类比问题。一旦创建了包含问题的数据文件,就可以进行评估。通常,评估可以通过 gensim 的 word2vec 准确度函数 完成,但为了获得更具体的评估结果(正确匹配、前 n 个匹配和覆盖率),本项目使用自己的准确度函数(test_mostsimilar_groups()
和 test_mostsimilar()
,在 evaluation.py
中)。
该项目提供的源文件包含100个唯一名词和2种模式,100个唯一形容词和6种模式,以及100个唯一动词和12种模式,共产生1万个类比问题。以下是可能的源文件示例:
adjectives.txt
可能的模式:基本形-比较级-最高级
示例内容:
好-更好-最好
大声-更大声-最大声
nouns.txt
可能的模式:单数-复数
示例内容:
图片-图片们
名字-名字们
verbs.txt
可能的模式:基本形-第一人称单数现在时-第二人称复数现在时-第三人称单数过去时-第三人称复数过去时
示例内容:
找到-我找到-你们找到-他找到-他们找到
搜索-我搜索-你们搜索-他搜索-他们搜索
语义测试集
通过语义测试,可以评估涉及词义的特征。因此有3个源文件:相反词、最佳匹配和不匹配。给定的源文件总共产生950个语义问题。
opposite.txt
此文件包含相反词,每行遵循一个词-相反词
的模式,用于评估模型寻找相反词的能力。脚本将每对词与10个随机的其他对组合,以构建类比问题。本项目提供的相反词源文件包含30个唯一对,产生300个类比问题。
示例内容:
夏天-冬天
白天-黑夜
bestmatch.txt
此文件包含内容相似的词对组,用于评估模型寻找主题相关类比的能力。脚本将每对词与同组的所有其他对组合,以构建类比问题。本项目提供的最佳匹配源文件包含7组,共77个唯一对,产生540个类比问题。
示例内容:
: 政治
伊丽莎白-女王
查尔斯-王子
: 科技
安卓-谷歌
iOS-苹果
Windows-微软
doesntfit.txt
此文件每行包含3个内容相似的词(用空格分隔)和一组不匹配的词(用破折号分隔),格式如匹配词1 匹配词2 匹配词3 不匹配词1-不匹配词2-...-不匹配词n
。这用于测试模型在4个词中找出最不匹配词的能力。脚本将每个匹配的三元组与破折号分隔的不匹配词列表中的每个词组合,以构建不匹配问题。本项目提供的不匹配源文件包含11个三元组,每个三元组有10个不匹配的词,产生110个问题。
示例内容:
兔子 狗 猫 树-主人-大象-食物-房子-人-动物-宠物店-草地-动物园
八月 四月 九月 年-月-日-小时-分钟-时间-日历-周-季度-时钟
可以使用以下选项执行脚本:
标志 | 描述 |
---|---|
-h, --help | 显示帮助信息并退出 |
-c, --create | 如果设置,在评估前创建测试集 |
-u, --umlauts | 如果设置,创建带有转换元音的附加测试集和/或使用它们 |
使用示例:
python evaluation.py my.model -u
注意:只有文件类型为.bin
、.model
或没有任何后缀的文件被视为二进制文件。
下载
使用此工具包基于德语维基百科(2015年5月15日)和2013年德语新闻文章(2015年5月15日)训练的优化德语语言模型可以在此下载:
german.model [704 MB]
如果您想将此项目用于自己的工作,可以使用以下BibTex条目进行引用:
@thesis{mueller2015,
author = {{Müller}, Andreas},
title = "{Analyse von Wort-Vektoren deutscher Textkorpora}",
school = {柏林工业大学},
year = 2015,
month = jun,
type = {学士论文},
url = {https://devmount.github.io/GermanWordEmbeddings}
}
GermanWordEmbeddings 工具和预训练语言模型完全免费使用。如果您觉得它有用,请考虑通过 Paypal 捐赠以支持进一步开发。💚