我正在尝试通过 https://nlp.stanford.edu/software/crf-faq.html 提到的来训练我自己的中文NER模型。我将数据转换为每行一个汉字,并在一个字符后标记实体,它喜欢:
红 ORG
帽 ORG
首 O
席 O
执 O
行 O
官 O
吉姆人
怀特赫斯特人
曾 O
表 O
示 O
, O
亚 组织
马 组织
逊 组织
公 O
共 O
云 O
有 O
许 O
多 O
。
使用命令java -cp stanford-ner.jar edu.stanford.nlp.ie.crf.CRFClassifier -prop tech.prop
后,它最终生成了classfier(chinese.misc.distsim.crf.ser.gz)。然后我检查了分类器在注释测试数据上的工作方式,我使用了命令java -cp stanford-ner.jar edu.stanford.nlp.ie.crf.CRFClassifier -loadClassifier chinese.misc.distsim.crf.ser.gz -testFile test.tsv
,它似乎有效。
但是当我使用命令java -cp stanford-ner.jar edu.stanford.nlp.ie.crf.CRFClassifier -loadClassifier chinese.misc.distsim.crf.ser.gz -textfile test.txt
通过文本段落而不是注释测试数据检查分类器时,分类器似乎毫无用处,它无法识别分词中文。
训练新的中文NER模型时有什么问题吗? 我认为一个可能的问题是我将训练数据转换为每行一个汉字。实际上在中文中,一个汉字而不是一个汉字,我是否应该使用分词的中文训练数据并将数据转换为每行一个中文单词,然后标记中文单词而不是汉字。
可用于处理不同类型的文本输入的标志包括:
-plainTextDocumentReaderAndWriter CLASSNAME Specify a class to read text documents (which extends DocumentReaderAndWriter)
-tokenizerFactory CLASSNAME Specify a class to do tokenization (which extends TokenizerFactory)
-tokenizerOptions "tokenizeNLs=true,asciiQuotes=true" Give options to the tokenizer, such as the two example options here.
这可能也很有用: https://stanfordnlp.github.io/CoreNLP/human-languages.html
除此之外,您还应该看看SeqClassifierFlags中的中文分词器功能。