意见发现的句子矢量形式的特征。

时间:2016-11-21 06:23:19

标签: machine-learning nlp neural-network word2vec

我想找到一个正面或负面的句子的意见。例如,只谈一句话。

The play was awesome

如果将其更改为矢量形式

[0,0,0,0]

搜索了一袋词之后

bad
naughty
awesome

矢量形式变为

[0,0,0,1]

其他句子也一样。现在我想将它传递给机器学习算法进行训练。 如何使用这些多个向量训练网络?(用于查找看不见的句子的意见)显然不是!因为输入是在神经网络中修复的。有什么办法吗?以上程序只是我的想法。如果我错了,请纠正我。提前致谢。

1 个答案:

答案 0 :(得分:0)

由于您的直观输入格式是“句子”。实际上,这是一串具有任意长度的令牌。将句子抽象为令牌系列对于许多现有算法来说不是一个好的选择,只能用于确定的输入格式。

因此,我建议您在整个训练集中尝试使用 tokenizer 。这将为您提供字典长度的向量,这对于给定的训练集是固定的。

因为当句子的长度变化很大时,字典的大小总是保持稳定。

然后,您可以将神经网络(或其他算法)应用于标记化的向量。

然而,由tokenizer生成的向量非常稀疏,因为您只处理句子而不是文章。

您可以尝试LDA(受监督,而不是PCA),以减少尺寸并放大差异。

这将保留您的训练数据的基本信息,并以固定大小表达您的数据,而这个“大小”不会太大。

顺便说一下,你可能不必用它的态度来标记每个单词,因为句子的意见也取决于其他类型的单词。

关于表达意见的单词数量的简单算术许多让你的模型高度偏向。更好地标记句子并将剩下的工作留给分类器。

  

混淆

     

PCA和LDA是尺寸减小技术。   difference

     

假设每个样本元组都表示为x(1-by-p向量)。

     

p太大了,我们不喜欢这样。

     

让我们找到一个矩阵A(p-by-k),其中k非常小。

     

所以我们得到reduced_x = x*A,最重要的是,reduced_x必须得到x = reduced_x   能够代表reduced_x个字符。

     

鉴于标记数据,LDA可以提供可以最大化的适当A.   不同类别的(reduced_x|y)之间的距离,也最小化   相同班级内的距离。

     

简单来说:压缩数据,保存信息。

     

当你有了   void kSortedArray:: displayKSorted() { cout<<"Please enter the no. of elements you want to KSort: "; cin>>N; cout<<"Please enter the value for K: "; cin>>K; int i=0; while (i<N) { cout<<"Enter element "<<i+1<<" : "; cin>>arr[i++]; } insertion_sort(arr,N); srand(time(NULL)); int output=0; i=0; int maxRand=0; int minRand=0; int arr2[N]; int a=0; int found=0; int found1=0; int range=0; int count1=0; vector<int>:: iterator it1; vector<int>:: iterator it2; vector<int> arr3; while(kSortedIndex.size()<N) { minRand=range-K; maxRand=range+K; output = minRand + (rand() % (maxRand - minRand + 1)); if (output<0) { output=N+output; } if(output>N-1) { output=output-N; } //arr2[i]=output; for(it1=kSortedIndex.begin();it1!=kSortedIndex.end();it1++) { if(*it1==output) { found=1; for(it2=arr3.begin();it2!=arr3.end();it2++) { if(*it2==output) { found1=1; break; } } if(found1==0) { arr3.push_back(output); count1++; } break; } } if(found==0) { kSortedIndex.push_back(output); count1=0; arr3.clear(); range++; } found=0; found1=0; if (count1>((2*K)+1)) { range--; count1=0; } if(range>(N-1)) range--; } vector<int>::iterator it; int j=0; // i=0; for(it=kSortedIndex.begin();it!=kSortedIndex.end();it++) { arr2[*it]=arr[j]; j++; //cout<<arr2[j++]; } for(j=0;j<N;j++) { cout<<arr2[j]; } } ,您可以定义培训数据:class kSortedArray { public: kSortedArray(); void displayKSorted(); protected: private: int N=0; int K=0; int* arr=new int [N]; createKSorted(); void insertion_sort(int arr[],int length); vector <int> kSortedIndex; }; ,其中y为   0或1。