spacy使用语料库中的数据创建新的语言模型

时间:2018-05-03 10:32:23

标签: python windows nlp spacy

我正在尝试在spaCy中创建一个新的语言模型(卢森堡语),但我对如何做到这一点很困惑。

我关注了instructions on their website并做了与this post类似的事情。但我不明白的是,如何添加像词汇或wordvectors这样的数据。 (例如"填写"语言模板)

我知道有一些dev tools用于这些操作,但是它们的执行记录很少,所以我不知道如何正确安装和使用它们,特别是因为它们似乎在python 2.7中发生了冲突使用我的spacy安装,因为它使用python 3。

至于现在,我有一个corpus.txt(来自wikipediadump)我想​​要训练的语言模板以及我创建的stop_words.pytokenizer_exceptions.py等默认值的语言模板用手填充。

任何人都做得很好,可以帮助我吗?

1 个答案:

答案 0 :(得分:8)

"语言模型有三个主要组成部分"在spaCy:"静态" Python中提供的语言特定数据(令牌化程序例外,停用词,用于映射细粒度到粗粒度词性标记的规则),统计模型已训练预测词性标签,依赖关系和命名实体(在大型标记语料库上训练并包含为二进制权重)和可选词向量,可以在训练之前或之后converted and added。您还可以使用Gensim等库在原始文本上训练自己的向量,然后将它们添加到spaCy。

spaCy v2.x允许您独立或随时训练所有管道组件,因此您可以在数据上训练标记器,解析器和实体识别器。所有这些都需要标记数据。如果您从头开始训练新语言,通常使用现有的树库。西班牙语Universal Dependencies语料库的Here's an example(也是用于训练spaCy西班牙语模型的语料库)。然后,您可以将数据转换为spaCy's JSON format并使用spacy train命令来训练模型。例如:

git clone https://github.com/UniversalDependencies/UD_Spanish-AnCora
mkdir ancora-json
python -m spacy convert UD_Spanish-AnCora/es_ancora-ud-train.json ancora-json
python -m spacy convert UD_Spanish-AnCora/es_ancora-ud-dev.json ancora-json
mkdir models
python -m spacy train es models ancora-json/es_ancora-ud-train.json ancora-json/es_ancora-ud-dev.json

我不知道您corpus.txt中的内容以及它是完全标记的还是仅原始文本。 (我也不知道卢森堡语的任何现有资源 - 听起来很难找到!)如果你的数据被贴上了标签,你可以使用其中一种格式将其转换为spaCy的格式built-in converters或你自己的小脚本。如果您的语料库仅包含原始文本,则需要先将其标记,然后查看它是否适合训练一般语言模型。最终,这归结为实验 - 但这里有一些策略:

  • 为每个组件手动标记整个语料库 - 例如如果要训练标记器,则使用词性标记;如果要训练解析器,则使用依赖关系标签;如果要训练实体识别器,则实体跨越。您需要很多数据 - 理想情况下,这是一个与Universal Dependencies类似的语料库。
  • 尝试教授现有的预训练模型卢森堡语 - 例如German model。这可能听起来很奇怪,但这并不是一种不寻常的策略。你不是从头开始训练,而是用卢森堡语的例子训练现有的模型(理想情况下,直到它对你的卢森堡文本的预测足够好)。您还可以通过在您的卢森堡文本上运行德语模型并提取并更正其错误(see here以获取详细信息)来创建更多培训数据。

请记住,您始终需要评估数据(也称为"开发数据"在文档中)。这通常是您在训练期间阻止的标记数据的随机部分,用于确定您的模型是否正在改进。