Posted in Machine Learning

Doc2Vec hay Paragraph Vectors

Distributed representations of sentences and documents – Le & Mikolov, ICML 2014

Chúng ta trước đây đã thấy sức mạnh kì diệu của word2vec học được cách biểu diễn phân tán (distributed representation) của một từ mà có thể giữ lại ngữ nghĩa của từ đó . Trong bài báo này , Le và Mikolov mở rộng ứng dụng để có thể tính toán biểu diễn phân tán cho sentences, paragraphs, hay kể cả một văn bản .Họ chỉ ra rằng model kết quả của họ thực hiện tốt hơn các state-of-the-art trước đó trong một bài toán phân loại văn bản và phân tích ngữ nghĩa .

Các thuật toán phân loại hay phân cụm thường xuyên đòi hỏi tập văn bản đầu vào biểu diẽn dưới dạng một vector có độ dài cố định (fixed length vector). Các mô hình phổ biến đó là bag-of-words và bag-of-n-grams . Bag-of-words đương nhiên là làm mất đi ngữ nghĩa có thể tới từ thứ tự của các từ . Bag-of-n-grams chỉ xem xét short context và không được tốt lắm nếu bới dữ liệu thưa thớt và  số chiều lớn.

Bag-of-words and bag-of-n-grams have very little sense about the semantics of the words or more formally the distances between the words. This means that words “powerful,” “strong” and “Paris” are equally distance despite the fact tha semantically, “powerful” should be closer to “strong” than “Paris.”

Các nhà nghiên cứu trước đây đã cố gắng kết hợp các distributed  word vectors  – ví dụ bằng cách sử dụng một trọng số trung bình của tất cả các từ trong một tài liệu, hoặc kết hợp các word vectors theo một thứ tự nhất định của cây phân tích cú pháp của một câu. Các phương pháp này cũng chịu việc mất mát thông tin về thứ tự từ , và sau này không dễ dàng để mở rộng câu .

Ghi nhớ rằng mô hình học word vector mà context xung quanh từ được sử dụng để dự đoán từ đó :

Our approach for learning paragraph vectors is inspired by the methods for learning the word vectors. The inspiration is that the word vectors are asked to contribute to a prediction task about the next word in the sentence. So despite the fact that the word vectors are initialized randomly, they can eventually capture semantics as an indirect result of the prediction task. We will use this idea in our paragraph vectors in a similar manner. The paragraph vectors are also asked to contribute to the prediction task of the next word given many contexts sampled from the paragraph.

Các từ vẫn được ánh xạ với các vectors duy nhất như trước . Thêm vào đó mỗi paragraph (hay document, nếu làm việc ở document level) cũng được kết nối tới một vector duy nhất . Word vectors nằm trong cột của matrix W, và paragraph vectors nằm trong cột của matrix D.

Thay đổi duy nhất vs quá trình học word vector là paragraph vector được nối với các word vectos để dự đoán từ kế tiếp trong một ngữ cảnh. Bối cảnh được cố định độ dài và lấy mẫu từ một cửa sổ trượt trên một đoạn. Paragraph vectors được chia sẻ cho tất cả các cửa sổ được tạo ra từ cùng một đoạn, nhưng không toàn bộ paragraphs . Ngược lại, word vector chia sẻ trên tất cả các đoạn văn.

The paragraph token can be thought of as another word. It acts as a memory that remembers what is missing from the current context – or the topic of the paragraph. For this reason, we often call this model the Distributed Memory Model of Paragraph Vectors (PV-DM).

Tại mỗi bước trong việc huấn luyện một context có  chiều dài cố định được lấy mẫu từ một đoạn ngẫu nhiên và được sử dụng để tính toán error gradient để cập nhật các thông số trong mô hình. Với N đoạn mỗi ánh xạ tới p chiều  và M từ  mỗi ánh xạ tới q chiều mô hình này có tổng cộng N x p + M x q tham số  (không bao gồm các tham số softmax).

Một khi họ đã được đào tạo, các paragraph vectors có thể được sử dụng như là các đặc trưng cho các đoạn văn trong bất kỳ công việc học máy . Vào thời gian dự đoán, một bước suy luận được thực hiện để tính toán paragraph  vector cho một paragraph  mới (chưa từng được thấy trước đây) . Trong thời gian này bước các thông số cho phần còn lại của mô hình (word vector W và trọng sốsoftmax U và b) được cố định.

In summary, the algorithm itself has two key stages: 1) training to get word vectors W, softmax weights U, b and paragraph vectors D on already seen paragraphs; and 2) “the inference stage” to get paragraph vectors D for new paragraphs (never seen before) by adding more columns in D and gradient descending on D while holding W, U, b fixed. We use D to make a prediction about some particular labels using a standard classifier, e.g., logistic regression.

Một biến thể của sơ đồ bên trên là bỏ qua context words  trong các đầu vào (tức là, do away with cửa sổ trượt), và thay vào đó buộc các mô hình để dự đoán từ lấy mẫu ngẫu nhiên từ đoạn ở đầu ra.

In reality, what this means is that at each iteration of stochastic gradient descent, we sample a text window, then sample a random word from the text window and form a classification task given the Paragraph Vector… We name this version the Distributed Bag of Words version of Paragraph Vector (PV-DBOW), as opposed to Distributed Memory version of Paragraph Vector (PV-DM) in the previous section.

PV-DM thực hiện tốt hơn so với PV-DBOW, nhưng  kết hợp cả hai PV-DM và PV-DBOW cho chúng ta kết quả tốt nhất :

PV-DM is consistently better than PV-DBOW. PV-DM alone can achieve results close to many results in this paper. For example, in IMDB, PV-DM only achieves 7.63%. The combination of PV-DM and PV-DBOW often work consistently better (7.42% in IMDB) and therefore recommended.

Cùng xem Paragraph Vectors thực hiện tốt như thế nào trong bài toán sentiment analysis và paragraph classification .

Kết quả thực nghiệm

Bộ dữ liệu Stanford Sentiment Treebank bao gồm 11855 câu đã được gán nhãn từ rất tiêu cực cho đến rất tích cực trong scale từ 0.0 cho 1.0. Sử dụng một window size là 8, và một vector mà là ghép nối từ PV-DBOW và một từ PV-DM (cả 2 đều có 400 chiều ), các tác giả đã đạt được các kết quả như sau :

Mặc dù sự thật là it không cần đòi hỏi phân tích cú pháp , paragraph vectors thực thi tốt hơn tất cả các baselines  2.4% (relative improvement 16%) so sánh với kết quả tốt nhất tiếp theo.

Tất  nhiên paragraph vectors không hạn chế ở mức độ câu  , như thế các tác giả có thể áp dụng kĩ thuật này tới bộ dữ liệu 100,000 movie reviews lấy từ IMDB…

We learn the word vectors and paragraph vectors using 75,000 training documents (25,000 labeled and 50,000 unlabeled instances). The paragraph vectors for the 25,000 labeled instances are then fed through a neural network with one hidden layer with 50 units and a logistic classifier to learn to predict the sentiment. At test time, given a test sentence, we again freeze the rest of the network and learn the paragraph vectors for the test reviews by gradient descent. Once the vectors are learned, we feed them through the neural network to predict the sentiment of the reviews.

Một lần nữa , paragraph vectors tốt hơn hẳn các state-of-the-art trước , với  15% cải tiến tương đối (relative improvement):

Lukas Vermeer của trang Booking.com từng nói “Nếu bạn hỏi một nhà khoa học dữ liệu rằng làm sao để xác định khi nào review là tích cực hay tiêu cực , họ sẽ bắt đầu nói về sentiment analysis… nhưng thật là lộn xộn trong thế giới thực . Đây là cách chung tôi giải quyết nó ở trang Booking.com:”

Với thực nghiệm thứ 3 , tác giá nhìn vào top 10 kết quả của mỗi query trong 1 triệu queries phổ biến nhất trong search engine, và rút ra paragraphs từ đó . Họ tạo ra tập 3 paragraphs: hai lấy từ kết quả của cùng truy vấn, và một từ một truy vấn khác

Our goal is to identify which of the three paragraphs are results of the same query. To achieve this, we will use paragraph vectors and compute the distances between the paragraphs. A better representation is one that achieves a small distance for pairs of paragraphs of the same query, and a large distance for pairs of paragraphs of different queries.

Như thế thực nghiệm này là một cách đánh giá liệu paragraph vectors theo cách nào đó có thể giữ lại ý nghĩa của paragraphs như word vectors đã làm được …

The results show that Paragraph Vector works well and gives a 32% relative improvement in terms of error rate. The fact that the paragraph vector method significantly outperforms bag of words and bigrams suggests that our proposed method is useful for capturing the semantics of the input text.

Để sử dụng được Paragraph vector trên java có thể tham khảo : http://deeplearning4j.org/doc2vec.html

Lược dịch từ : https://blog.acolyer.org/2016/06/01/distributed-representations-of-sentences-and-documents/

Posted in Machine Learning

Word2vec : The amazing power of word vectors

Word vector là gì?

Nói đơn giản , nó chỉ là một vector của các trọng số biểu diễn cho từ đó . Trong dạng biểu diễn  1-of-N (hay ‘one-hot’) mã hoá các phần tử trong vector kết hợp với một từ trong vocabulary. Cách mã hóa của một từ cho trước chỉ đơn giản là vector trong đó các phần tử liên quan được thiết lập là một, và tất cả các phần tử  khác là số không.

Giả sự bộ từ điển của chúng ta chỉ gồm có 5 từ . Chúng ta có thể mã hoá từ  ‘Queen’ như sau:

Sử dụng loại mã hóa này , không có cách so sánh có ý nghĩa giữa hai word vectors hay kiểm tra bằng nhau .

Trong word2vec , một biểu diễn phân tán(distributed representation) của một từ được sử dụng . Sử dụng một vector với vài trăm chiều . Mỗi từ được biểu diễn bới tập các trọng số của từng phần tử trong nó. Như thế thay vì kết nối  one-to-one giữa các phần từ trong vector và 1 từ , biểu diễn từ sẽ là dàn trải tất cả các thành phần của vector , và mỗi phần tử trong vector sẽ góp phần định nghĩa nhiều từ khác

Word2vec có thể được nhìn nhận kiểu kiểu như thế này :

Mỗi vector như vậy cũng đại diện cho một cách tóm lược của ý nghĩa của một từ. Và như chúng ta sẽ thấy tiếp theo, chỉ đơn giản bằng cách kiểm tra một ngữ liệu lớn nó có thể học word vectors , ta có thể nắm bắt các mối quan hệ giữa các từ trong một cách đáng ngạc nhiên. Chúng ta cũng có thể sử dụng các vector là đầu vào cho một mạng nơ ron.

Suy luận với word vectors

We find that the learned word representations in fact capture meaningful syntactic and semantic regularities in a very simple way. Specifically, the regularities are observed as constant vector offsets between pairs of words sharing a particular relationship. For example, if we denote the vector for word i as xi, and focus on the singular/plural relation, we observe that xapple – xapples ≈ xcar – xcars, xfamily – xfamilies ≈ xcar – xcars, and so on. Perhaps more surprisingly, we find that this is also the case for a variety of semantic relations, as measured by the SemEval 2012 task of measuring relation similarity.

Các vectơ rất tốt ở khía cạnh trả lời câu hỏi tương tự của các hình thức “a is to b as c is to?”. Ví dụ , man is to woman as uncle is to ? (aunt) chỉ cần sử dụng khoảng cách cosine

Ví dụ , đây là vector offsets cho 3 cặp từ trong mối quan hệ giới tính :

Và đây là mối quan hệ số nhiều / số ít :

Việc tương tác với vector cho phép chúng ta trả lời câu hỏi  “King – Man + Woman = ?” và sẽ nhận được kết quả “Queen” !  Đây quả là điều đáng ghi nhớ khi mà chúng ta có được những kiến thức này đơn giản chỉ nhìn vào các từ trong các context mà không có thêm một thông tin ngữ nghĩa gì cả .

Somewhat surprisingly, it was found that similarity of word representations goes beyond simple syntatic regularities. Using a word offset technique where simple algebraic operations are performed on the word vectors, it was shown for example that vector(“King”) – vector(“Man”) + vector(“Woman”) results in a vector that is closest to the vector representation of the word Queen.

Vectors cho King, Man, Queen, & Woman:

Kết quả của  King – Man + Woman = ?

Đây là 1 vài kết quả đạt được sử dụng cùng một kĩ thuật :

Đây là mối quan hệ đất nước – thủ đổ trong phép chiếu PCA 2 chiều :

Đây là một vài ví của  ‘a is to b as c is to ?’ trả lời bởi word vectors:

Chúng ta có thể dùng phép cộng vector để hỏi câu hỏi như “German + airlines” bằng cách tìm từ nào gần nhất:

Word vectors với quan hệ ngữ nghĩa như thế có thể được sử dụng để cải thiện rất nhiều các ứng dụng NLP như  machine translation, information retrieval and question answering systems, và các ứng dụng khác chưa được phát minh

Bài kiểm tra mối quan hệ  ngữ nghĩa – cú pháp for understanding of a wide variety of relationships as shown below. Sử dụng 640-dimensional word vectors, một skip-gram model đạt được 55% độ chính xác ngữ nghĩa và 59% độ chính xác cú pháp.

Quá trình học word vectors

Mikolov không phải là người đầu tiên sử dụng continuous vector biểu diễn các từ ,nhưng họ đã làm là chỉ ra cách để giảm thiểu độ phức tạp tính toán của quá trình học để biểu diễn – tạo ra nó thực hiện được để học high dimensional word vectors trong một lượng cực lớn dữ liệu. Ví dụ , “We have used a Google News corpus for training the word vectors. This corpus contains about 6B tokens. We have restricted the vocabulary size to the 1 million most frequent words…”

Độ phức tạp của  neural network language models (feedforward or recurrent) tới từ các tầng ẩn không tuyển tính (non-linear hidden layer(s)).

While this is what makes neural networks so attractive, we decided to explore simpler models that might not be able to represent the data as precisely as neural networks, but can posssible be trained on much more data efficiently.

Hai kiến trúc mới được đề xuất: Continuous Bag-of-Words model, và  Continuous Skip-gram model. Hãy cùng nhìn vào mô hình continuous bag-of-words (CBOW) trước .

Một đoạn trong bài báo có viết : “The recently introduced continuous Skip-gram model is an efficient method for learning high-quality distributed vector representations that capture a large number of precises syntatic and semantic word relationships.” Tưởng tượng một cửa sổ trượt qua text , nó sẽ bao gồm từ trung tâm mà đang focus , cùng với đó là 4 từ trước nó và 4 từ theo sau nó :

The context words form the input layer. Mỗi từ sẽ được mã hoá kiểu one-hot , như thế nếu vocabulary size là V thì sẽ là  V-dimensional vectors với chỉ một phần tử được đặt là 1 và tất cả các phần tử khác là 0 . Như thế sẽ chỉ có một tầng ẩn và một output layer.

Mục đích huẩn luyện đó là làm cục đại hoá xác suất có điều kiện  nhìn thấy output thật sự (the focus word) cho trước bởi  input context words. Trong ví dụ này , cho input(“an”, “efficient”, “method”, “for”, “high”, “quality”, “distributed”, “vector”) chúng ta muốn cực đại hoá xác suất lấy  đc từ “learning” là output.

Bởi vì input vector của chúng ta có dạng one-hot, nhân  input vector với ma trận trọng số  W1 hay đơn giản là lấy hàng  từ W1.

Cho trước  C input word vectors, “activation function: cho lớp ẩn tính tổng các hàng”hot” trong W1, và rồi chia cho C để lấy trung bình .

This implies that the link (activation) function of the hidden layer units is simply linear (i.e., directly passing its weighted sum of inputs to the next layer).

Từ  hidden layer cho tới output layer, ma trận trọng số thứ 2  W2 có thể được sử dụng để tính toán score cho từng từ trong vocabulary, và softmax có thể được sử dụng để phân bổ lại giá trị cho các từ .

Mô hình skip-gram là một mô hình đối lập hoàn toàn với mô hình CBOW . Nó được xây dựng  tập trung vào từ như một single input vector, và  target context words bây giờ là output layer:

Activation function cho hidden layer  đơn giản sao chép hàng tương ứng trong ma trận trọng số  W1 (linear) mà chúng ta đã thấy trước đó . Tại output layer , chúng ta cho ra C multinomial distributions thay vì chỉ một . Mục đích huấn luyện sẽ là tối thiểu hoá tổng lỗi dự đoán cho tất cả các context words trong  output layer. Trong ví dụ của chúng ta , đầu vào sẽ là  “learning”, và chúng ta sẽ mong muốn là sẽ nhìn thấy (“an”, “efficient”, “method”, “for”, “high”, “quality”, “distributed”, “vector”) tại output layer.

Tối ưu hoá

Phải cập nhật tất cả output vector  cho tất cả các từ trong tập huấn luyện rất là tốn kém ….

To solve this problem, an intuition is to limit the number of output vectors that must be updated per training instance. One elegant approach to achieving this is hierarchical softmax; another approach is through sampling.

Hierarchical softmax  sử dụng cây nhị phân để biết diễn tất cả các từ trong vocabulary. Mỗi từ là một lá trong cây . Với mỗi lá , tồn tại duy nhất một đường từ gốc tới lá này , như thế đường này sẽ được sử dụng để ước lượng xác suất mối từ biểu diễn bởi lá .

“We define this probability as the probability of a random walk starting from the root ending at the leaf in question.”

The main advantage is that instead of evaluating V output nodes in the neural network to obtain the probability distribution, it is needed to evaluate only about log2(V)words… In our work we use a binary Huffman tree, as it assigns short codes to the frequent words which results in fast training.

Negative Sampling chỉ đơn giản là chúng ta chỉ cập nhật sample của output word mỗi vòng lặp . Target output word sẽ được giữ trong sample và được cập nhật và chúng ta sẽ thêm một vài (non-target) từ như  negative samples.

“A probabilistic distribution is needed for the sampling process, and it can be arbitrarily chosen… One can determine a good distribution empirically.”

Milokov cũng sử dụng một cách tiếp cận subsampling đơn giản để chống lại sự mất cân bằng giữa các từ hiếm và thường xuyên trong tập huấn luyện (ví dụ, “in”, “the”, and “a” cung cấp ít giá trị thông tin hơn các từ hiếm ). Mỗi từ trong tập huấn luyện được loại bỏ với một xác suất P(wi)

f(wi là tần suất của từ  wi và t là 1 ngưỡng được chọn , thường xung quanh 10-5)

DeepLearning4j

Loading Data

Bây giờ tạo và đặt tên cho một class mới trong Java . Say đó , bạn sẽ cho raw sentences vào trong file .txt của bạn , đưa chúng qua iterator của bạn , và một số loại tiền xử lý , chẳng hạn chuyển đổi tất cả các từ về chữ thường .

        String filePath = new ClassPathResource("raw_sentences.txt").getFile().getAbsolutePath();

        log.info("Load & Vectorize Sentences....");
        // Strip white space before and after for each line
        SentenceIterator iter = new BasicLineIterator(filePath);

Nếu bạn muốn tải dữ liệu text của bạn từ ngoài folder của project :

        log.info("Load data....");
        SentenceIterator iter = new LineSentenceIterator(
             new File("/Users/cvn/Desktop/file.txt"));
        iter.setPreProcessor(new SentencePreProcessor() {
            @Override
            public String preProcess(String sentence) {
                return sentence.toLowerCase();
            }
        });

 

Tokenizing the Data

Word2vec cần được cung cấp các từ hơn các các câu , nên bước tiếp theo sẽ là tách từ từ dữ liệu . Để tách từ từ dữ liệu , ta có thể dùng space để nhận biết , ví dụ :

        // Split on white spaces in the line to get words
        TokenizerFactory t = new DefaultTokenizerFactory();
        t.setTokenPreProcessor(new CommonPreprocessor());

Nó sẽ cho chúng ta mỗi từ nằm trên một dòng

Training the Model

Chúng ta có thể tuỳ chỉnh mạng nơ ron Word2vec của chúng ta :

        log.info("Building model....");
        Word2Vec vec = new Word2Vec.Builder()
                .minWordFrequency(5)
                .iterations(1)
                .layerSize(100)
                .seed(42)
                .windowSize(5)
                .iterate(iter)
                .tokenizerFactory(t)
                .build();

        log.info("Fitting Word2Vec model....");
        vec.fit();

Tuỳ chỉnh các siêu tham số với ý nghĩa như sau :

  • batchSize là số từ chúng ta xử lý trong một thời điểm.
  • minWordFrequency là số lần xuất hiện ít nhất phải xuất hiện trong bộ ngữ liệu . Ở đây , nếu mà một từ xuất hiện ít hơn 5 lần , nó sẽ không được học . Các từ phải xuất hiện trong nhiều ngữ cảnh(context) để học các feature hữu ích về nó . Trong một bộ ngữ liệu lớn , hoàn toàn hợp lý để tăng ngưỡng minimum này lên .
  • useAdaGrad – Adagrad tạo ra các gradient khác nhau cho từng feature . Ở đây chúng ta sẽ không quan tâm đến nó .
  • layerSize chỉ rõ số features trong word vector . Nó bằng với số chiều trong featurespace . Từ được biểu diễn bới 500 features sẽ trở thành một điểm trong không gian 500 chiều .
  • iterations : đây là số lần mà bạn cho phép mạng của bạn cập nhật các hệ số của nó cho 1 batch của dữ liệu . Quá ít iterations có nghĩa là có thể không có đủ thời gian để học tất cả , quá nhiều sẽ kiến thời gian huấn luyện của mạng lâu hơn .
  • learningRate là step size cho mỗi lần cập nhật các hệ số , như các từ được bố trí trong feature space.
  • minLearningRate là mức sàn của  learning rate. Learning rate như số lượng từ bạn huấn luyện giảm xuống . Nếu  learning rate co lại quá nhiều , mạng huấn luyện sẽ không hiệu quả . Nó giữ các hệ số biến đổi .
  • iterate bảo mạng rằng batch của dataset nào nó đang huấn luyện.
  • tokenizer cho các từ vào  các batch hiện tại .
  • vec.fit() bắt đầu huấn luyện.

Evaluating the Model, Using Word2vec

Bước tiếp theo sẽ là đánh giá chất lượng feature vectors của bạn .

        // Write word vectors
        WordVectorSerializer.writeWordVectors(vec, "pathToWriteto.txt");

        log.info("Closest Words:");
        Collection<String> lst = vec.wordsNearest("day", 10);
        System.out.println(lst);
        UiServer server = UiServer.getInstance();
        System.out.println("Started on port " + server.getPort());
        
        //output: [night, week, year, game, season, during, office, until, -]

Dòng vec.similarity("word1","word2") sẽ trả lại độ tương đồng cosine của hai từ .Càng gần 1 , thì mạng nhận thức được 2 từ càng tương đồng  . Ví dụ như:

        double cosSim = vec.similarity("day", "night");
        System.out.println(cosSim);
        //output: 0.7704452276229858

Với vec.wordsNearest("word1", numWordsNearest), cho phép bạn lấy ra các từ tương tự về mặt ngữ nghĩa . Bạn có thể đặt số từ gần nhất mà bạn muốn ở tham số thứ 2 của wordsNearest. Ví dụ như:

        Collection<String> lst3 = vec.wordsNearest("man", 10);
        System.out.println(lst3);
        //output: [director, company, program, former, university, family, group
                               , such, general]

Saving, Reloading & Using the Model

Bạn sẽ muốn lưu lại model của bạn . Các thông thường để lưu models trong Deeplearning4j là thông qua serialization utils (Java serialization  tương tự như Python pickling , biến đổi một đối tượng sang series of bytes).

        log.info("Save vectors....");
        WordVectorSerializer.writeFullModel(vec, "pathToSaveModel.txt");

Nó sẽ lưu các vectors sang một file là  words.txt mà sẽ xuất hiện trong root của thư mục mà Word2vec được huấn luyện. Đầu ra của file sẽ phải có mỗi từ một dòng theo sau đó sẽ là một chuỗi các từ mà cùng nhau biểu diễn features vector của từ này .

Để làm việc tiếp với các vectors, đơn giản chỉ cần goi các phương thức trong  vec như sau:

Collection<String> kingList = vec.wordsNearest(Arrays.asList("king", "woman"), 
Arrays.asList("queen"), 10);

Ví dụ kinh điển của Word2vec’s là “king – queen = man – woman” và “king – queen + woman = man”.

Ví dụ bên trên sẽ cho ra 10 từ gần nhất với vector  king - queen + woman, mà sẽ phải bao gồm  man. Tham số đầu tiên của  wordsNearest sẽ có các từ “positive” kingwoman, sẽ có dấu + kết hợp chúng , tham số thứ 2 sẽ bao  gồm từ “negative” queen, mà sẽ kết hợp với dấu – ; và tham số thứ 3 là độ dài của list các từ gần nhất bạn muốn nhìn thấy .

Bạn có thể reload vectors như sau :

        Word2Vec word2Vec = WordVectorSerializer.loadFullModel("pathToSaveModel.txt");

Bạn có thể sử dụng Word2vec như một  lookup table:

        WeightLookupTable weightLookupTable = wordVectors.lookupTable();
        Iterator<INDArray> vectors = weightLookupTable.vectors();
        INDArray wordVector = wordVectors.getWordVectorMatrix("myword");
        double[] wordVector = wordVectors.getWordVector("myword");

Nếu một từ không có trong vocabulary, Word2vec returns zeros.

Importing Word2vec Models

Google News Corpus model we use to test the accuracy of our trained nets is hosted on S3. Người dùng với phần cứng hiện tại có thể tốn rất lâu để huấn luyện bộ ngữ liệu lớn , thay vào đó có thể đơn giản download nó về

Nếu bạn huấn luyện với  C vectors hoặc Gensimm, có thể import model như sau :

    File gModel = new File("/Developer/Vector Models/
                               GoogleNews-vectors-negative300.bin.gz");
    Word2Vec vec = WordVectorSerializer.loadGoogleModel(gModel, true);

Với một models rất lớp , bạn có thể gặp vấn đề với heap space . Google model sẽ cần tới 10G RAM , và JVM chỉ có thể chạy tới 256 MB RAM, như thế bạn sẽ phải điều chỉnh heap space của bạn . Với IntelliJ có thể làm

    //Click:
    IntelliJ Preferences > Compiler > Command Line Options 
    //Then paste:
    -Xms1024m
    -Xmx10g
    -XX:MaxPermSize=2g
    // Or
    Click File->Settings->Build,Execution,Deployment->Complier->Build 
process heap size


 Nếu bạn truy vấn Word2vec model một từ không xuất hiện trong tập huấn luyện , nó sẽ trả về null

Doc2vec & Other NLP Resources

Other Deeplearning4j Tutorials

Word2Vec in Literature

It's like numbers are language, like all the letters in the language are turned 
into numbers, and so it's something that everyone understands the same way.You 
lose the sounds of the letters and whether they click or pop or touch the palate,
or go ooh or aah, and anything that can be misread or con you with its music or 
the pictures it puts in your mind, all of that is gone, along with the accent, 
and you have a new understanding entirely, a language of numbers, and everything 
becomes as clear to everyone as the writing on the wall. So as I say there comes 
a certain time for the reading of the numbers.
                                     -- E.L. Doctorow, Billy Bathgate