我是CNTK的新手。我的环境是C#(不幸的是,我不是python或BrainScript程序员)。
我正在尝试使用CNTK在自由文本(NLP)上设计/训练/测试LSTM,以选择适当的标题(从给定的标题集中,我的数据中有大约8,000个)。
我使用了一个单独的程序将每个单词映射到一个包含100个元素的实数向量中(100是可配置的值;我的非CNTK程序GloVe可以生成我选择的任何宽度)。
我的原始输入看起来像:
|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,1,0,...]。
每个单词都需要翻译(通过查找C#词典)成一个数组(包含100个实数)。
我意识到这是CNTK的LSTM中的嵌入层,但是我找不到任何教程/示例(尤其是在C#中),以了解如何使用非热一嵌入来添加转换层。
尽管有其全部价值,但我在C#中执行此操作的模板是CNTK示例中的LSTMSequenceClassifier.cs。
链接到CNTK示例:
https://github.com/Microsoft/CNTK/blob/master/Examples/TrainingCSharp/Common/LSTMSequenceClassifier.cs
任何帮助将不胜感激。在过去的一周里,我全力以赴!
最佳答案
由于我也是新手,但我觉得我宁愿使用最原始的数据格式,而不是使用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
具有示例教程中使用的数据文件
关于c# - 作法:使用Word2Vec嵌入字词的CNTK C#LSTM自由文本(NLP)分类器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47639108/