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

spacy create new language model with data from corpus

我正在尝试在 spaCy 中创建一个新的语言模型(卢森堡语),但我对如何执行此操作感到困惑。

我关注了instructions on their website and did a similar thing as in this post。但我不明白的是,如何添加词汇或词向量等数据。 (例如 "fill" 语言模板)

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

至于现在,我有一个 corpus.txt(来自 wikipediadump),我想在其上进行训练,还有一个语言模板,其中包含 stop_words.pytokenizer_exceptions.py 等默认设置,我手工创建和填充。

有人曾经正确地完成过这个并且可以在这里帮助我吗?

spaCy 中 "language model" 的三个主要组成部分:"static" 语言特定数据 Python(分词器异常, 停用词, 将细粒度词性标签映射到粗粒度词性标签的规则), 统计模型 被训练来预测词性标签, 依赖关系和命名实体 (在大型标记语料库上训练并包含为二进制权重)和 可选词向量 可以是 converted and added before or after training. You can also train your own vectors on your raw text using a library like Gensim,然后将它们添加到 spaCy。

spaCy v2.x 允许您独立或在线训练所有管道组件,因此您可以在数据上训练标记器、解析器和实体识别器。所有这些都需要 标记数据 。如果您从头开始训练一种新语言,通常会使用现有的树库。 Here's an example of the Universal Dependencies corpus for Spanish (which is also the one that was used to train spaCy's Spanish model). You can then convert the data to 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 里有什么,也不知道它是完全标记的还是只有原始文本。 (我也不知道卢森堡语的任何现有资源——听起来可能很难找到!)如果你的数据被标记,你可以使用 built-in converters 之一或你自己的小工具将其转换为 spaCy 的格式脚本。如果您的语料库仅包含原始文本,您需要先对其进行标记,然后查看它是否适合训练通用语言模型。最终,这归结为实验——但这里有一些策略:

  • 为每个组件手动标记整个语料库——例如如果要训练标注器,则使用词性标记;如果要训练解析器,则使用依赖标签;如果要训练实体识别器,则使用实体跨度。不过,您将需要 大量 数据——理想情况下,语料库的大小与 Universal Dependencies 的相似。
  • 尝试教授现有的预训练模型卢森堡语——例如 German model. This might sound strange, but it's not an uncommon strategy. Instead of training from scratch, you post-train the existing model with examples of Luxembourgish (ideally until its predictions on your Luxembourgish text are good enough). You can also create more training data by running the German model over your Luxembourgish text and extracting and correcting its mistakes (see here 了解详情)。

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