我是CNTK的新手。我的环境是C#(不幸的是,我不是python或BrainScript程序员)。
我正在尝试使用CNTK在自由文本(NLP)上设计/训练/测试LSTM以选择合适的标题(来自给定的标题集,我的数据中约有8,000个标题)。
我使用了一个单独的程序将每个单词映射为100个元素的实数向量(100是一个可配置的值;我的非CNTK程序GloVe可以生成我选择的任何宽度)。 / p>
我的原始输入类似于:
|label 17 |features the brown fox jumped over the ...
|label 19 |features there comes a time when all ...
...
其中' 17'是第17个标题的简写,实际上是一个热门的代表:[0,0,...,1,0,0,...]其中' 1'在第17位。
每个输入行都是一系列单词(用空格分隔) - 典型长度是几百个单词,但有些数据(行)中有数千个单词。
我的问题是,我不知道如何将原始文件格式的运行时转换插入到CNTK可以使用的内容中。
我不能假设内存数据,因为在生产中我们将对数百万行的数据进行培训。
在每个小批次中:
' 17' (在上面的示例中)需要转换为[0,...,1,0,...]。
每个单词都需要翻译(通过查找到C#字典)到一个数组(100个)实数中。
我意识到这是CNTK的LSTM中的嵌入层,但我找不到任何教程/示例(特别是在C#中)如何使用非热点嵌入添加转换层。
尽管如此,我在C#中执行此操作的模板是CNTK示例中的 LSTMSequenceClassifier.cs 。
非常感谢任何帮助。在过去的一周里,我已经绞尽脑汁了!
答案 0 :(得分:0)
由于我也是新手,但我觉得我宁愿使用最原始的数据格式,而不是寻求更高级的CNTK功能..
我的方法是
0 |feature 43:1 |label 0 0 1 0
0 |feature 23:1
0 |feature 15:1
0 |feature 34:1
1 |feature 37:1 |label 0 0 0 1
1 |feature 67:1
1 |feature 69:1
1 |feature 12:1
其中最大分类是4种不同的分类
和
43rd word in your matrix is "the"
23rd is "fox"
等等等等
参考https://cntk.ai/pythondocs/sequence.html
我知道阅读python可能会让你第一次感到困惑,但你会得到它的支持
https://github.com/Microsoft/CNTK/tree/master/Tests/EndToEndTests/Text/SequenceClassification/Data
拥有他们拥有的示例教程中使用的数据文件