实体注释在RASA NLU中有空格

时间:2018-01-20 20:33:03

标签: c# nlp rasa-nlu

我正在详细阅读Training Data RASA Format

{
  "text": "show me chinese restaurants",
  "intent": "restaurant_search",
  "entities": [
    {
      "start": 8,
      "end": 15,
      "value": "chinese",
      "entity": "cuisine"
    }
  ]
}

子句Chinese被标记为话语的第8到第15索引的实体。

我写了一个小的C#程序来验证话语中字符索引的正确性。

public class Program
    {
        public static void Main(string[] args)
        {
            string s = "show me chinese restaurants";
            int i = 0;

            foreach(var item in s.ToCharArray())
                Console.WriteLine("{0} - {1}", item, i++);
        }
    }

但是当我运行程序时,我得到以下输出:

s - 0
h - 1
o - 2
w - 3
  - 4
m - 5
e - 6
  - 7
c - 8
h - 9
i - 10
n - 11
e - 12
s - 13
e - 14
  - 15
r - 16
e - 17
s - 18
t - 19
a - 20
u - 21
r - 22
a - 23
n - 24
t - 25
s - 26

注意文本注释的奇怪行为,子串Chinese从索引8开始,到15处用空格结束。

但是子串Chinese应该从索引8开始,到第14位结束。

当我训练相同的文字Chinese时,索引从第8位开始,到14结束。我按照详细here向RASA发出Misaligned Entity Annotation警告。

有人可以解释这种奇怪的行为。

由于

1 个答案:

答案 0 :(得分:4)

阅读链接provided我可能已经想出了一个可能的解释:

  

它们一起使python样式范围应用于字符串,例如在下面的示例中,使用text ="显示中国餐馆",然后发送文字[8:15] ==' chinese'

这引导我走上了我正在思考的道路

  

嗯,这很奇怪,我想知道python是否真的编入索引

我开了一个快速的应用来证明这一点:

text = "show me chinese restaurants"
print(text[8:15])

现在这可能没有意义,因为这里数组的空间15中的字符实际上是一个空格。这让我想到了这篇文章:

  

https://www.pythoncentral.io/how-to-slice-listsarrays-and-tuples-in-python/

他们在这里的示例text[8:15]中使用的运算符似乎对数组进行切片,他们使用示例:

a = [1, 2, 3, 4, 5, 6, 7, 8]

a[1:4]输出:[2, 3, 4]

并解释为

  

让我解释一下。 1表示从列表中的第二个元素开始(请注意,切片索引从0开始)。 4表示在列表中的第五个元素处结束,但不包括它。中间的冒号是Python的列表如何识别我们想要使用切片来获取列表中的对象。

所以切片的第二个参数似乎是独占的。

希望这有帮助

P.S。不得不学习和设置一些python的东西:D