weka - 使用 WEKA 进行命名实体识别

标签 weka named-entity-recognition

我是 WEKA 的新手,我想问您一些有关 WEKA 的问题。 我已遵循本教程( Named Entity Recognition using WEKA )。

但是我真的很困惑,根本不知道。

  1. 如果我想按短语而不是单词/标记过滤字符串,是否可以?

例如在我的 .ARFF 文件中:

  @attribute text string
  @attribute tag {CC, CD, DT, EX, FW, IN, JJ, JJR, JJS, LS, MD, NN, NNS, NNP, NNPS, PDT, POS, PRP, PRP$, RB, RBR, RBS, RP, SYM, TO, UH, VB, VBD , VBG, VBN , VBP, VBZ, WDT, WP, WP$, WRB, ,, ., :}
  @attribute capital {Y, N}
  @attribute chunked {B-NP, I-NP, B-VP, I-VP, B-PP, I-PP, B-ADJP, B-ADVP , B-SBAR, B-PRT, O-Punctuation}
  @attribute @@class@@ {B-PER, I-PER, B-ORG, I-ORG, B-NUM, I-NUM, O, B-LOC, I-LOC}

  @data
  'Wanna',NNP,Y,B-NP,O
  'be',VB,N,B-VP,O
  'like',IN,N,B-PP,O
  'New',NNP,Y,B-NP,B-LOC
  'York',NNP,Y,I-NP,I-LOC
   '?',.,N,O-Punctuation,O

因此,当我过滤字符串时,它将字符串标记为单词,但我想要的是,我想根据短语标记/过滤字符串。例如,根据分块属性提取短语“New York”而不是“New”和“York”。

“B-NP”表示开始短语,“I-NP”表示下一个短语(短语的中间或结尾)。

  • 我如何显示分类类的结果,例如:
  • B-PER 和 I-PER 为类名 PERSON?

                     TP Rate   FP Rate   Precision   Recall  F-Measure   ROC Area  Class
                        0         0.021      0         0         0          0.768    B-PER
                        1         0.084      0.333     1         0.5        0.963    I-PER
                      0.167     0.054      0.167     0.167     0.167      0.313    B-ORG
                        0         0          0         0         0          0.964    I-ORG
                        0         0          0         0         0          0.281    B-NUM
                        0         0          0         0         0          0.148    I-NUM
                        0.972     0.074      0.972     0.972     0.972      0.949    O
                        0.875     0          1         0.875     0.933      0.977    B-LOC
                        0         0          0         0         0          0.907    I-LOC
    

    加权平均。 0.828 0.061 0.811 0.828 0.813 0.894

    最佳答案

    在我看来,WEKA(目前)不会是进行 NER 的最佳机器学习软件...据我所知,WEKA 确实对示例集进行分类,对于 NER 可以这样做:

    1. 通过标记中的句子标记:在这种情况下,序列(即连续性)将丢失...“New”和“York”是两个单独的示例,这些单词是连续的这一事实不以任何方式考虑在内。
    2. 通过保留 block /句子作为示例:序列可以作为一个整体保留并进行过滤(例如 StringToWordVector),但必须为每个 block /句子关联一个类(例如 O +O+O+B-LOC+I-LOC+O 是示例中整个句子的类别)。

    在这两种情况下,都没有考虑连续性,这确实令人不安。另外,据我所知,这对于 R 来说也是一样的(?)。这就是为什么“序列标签”(NER、形态语法、语法和依赖关系)通常使用软件来完成,该软件使用当前单词以及前一个、下一个单词等来确定标记类别,并且可以输出单个标记,也可以输出多标记表达式或结构更复杂。

    对于NER,目前通常使用CRF,参见:

    • CRF++
    • CRFSuite
    • 马鹿
    • 木槌
    • ...

    关于weka - 使用 WEKA 进行命名实体识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29487186/

    相关文章:

    java - Weka:ADTree 和 LADTree 非法选项错误

    运行 weka 分类器的 C# 代码

    nlp - 创建用于职称命名实体识别的训练数据集

    java - JAVA 中字符串列表的机器学习分类,没有任何上下文围绕它们

    java - 如何在OpenNLP中进行嵌套命名实体识别?

    java - 确认实体的最佳方法

    java - 导出 Weka 模型以在 C 或 C++ 中使用

    algorithm - 哪种算法可用于检测时间模式?

    text - 命名实体作为文本分类中的一个特征?

    java - Weka 是否按顺序评估?