Mạng nơ-ron phân tích dữ liệu chuỗi?


28

Vì vậy, tôi mới bắt đầu tìm hiểu làm thế nào một mạng nơ-ron có thể hoạt động để nhận dạng các mẫu và phân loại đầu vào, và tôi đã thấy một mạng nơ-ron nhân tạo có thể phân tích dữ liệu hình ảnh và phân loại hình ảnh ( bản demo với các mạng lưới ) và khóa ở đó là để lấy mẫu hình ảnh xuống và mỗi pixel kích thích một nơ ron đầu vào vào mạng.

Tuy nhiên, tôi đang cố gắng quấn đầu nếu điều này có thể được thực hiện với đầu vào chuỗi? Trường hợp sử dụng mà tôi có là "công cụ đề xuất" cho phim mà người dùng đã xem. Phim có rất nhiều dữ liệu chuỗi (tiêu đề, cốt truyện, thẻ) và tôi có thể tưởng tượng "downsampling" văn bản xuống một vài từ chính mô tả bộ phim đó, nhưng ngay cả khi tôi phân tích ra năm từ hàng đầu mô tả bộ phim này, tôi nghĩ rằng tôi cần tế bào thần kinh đầu vào cho mỗi từ tiếng Anh để so sánh một bộ phim? Tôi có thể giới hạn các nơ-ron đầu vào chỉ với các từ được sử dụng trong tập hợp, nhưng sau đó nó có thể phát triển / học bằng cách thêm phim mới (người dùng xem phim mới, với từ mới) không? Hầu hết các thư viện mà tôi thấy không cho phép thêm nơ-ron mới sau khi hệ thống đã được đào tạo?

Có một cách tiêu chuẩn để ánh xạ dữ liệu chuỗi / từ / ký tự vào các đầu vào vào mạng thần kinh không? Hoặc là một mạng thần kinh thực sự không phải là công cụ phù hợp cho công việc phân tích dữ liệu chuỗi như thế này (công cụ nào tốt hơn để khớp mẫu trong dữ liệu chuỗi)?

Câu trả lời:


19

Sử dụng một mạng lưới thần kinh để dự đoán dữ liệu ngôn ngữ tự nhiên có thể là một nhiệm vụ khó khăn, nhưng có những phương pháp đã được thử và đúng để làm cho nó có thể.

Trong trường Xử lý ngôn ngữ tự nhiên (NLP), văn bản thường được biểu diễn bằng cách sử dụng mô hình từ. Nói cách khác, bạn có một vectơ có độ dài n , trong đó n là số lượng từ trong từ vựng của bạn và mỗi từ tương ứng với một thành phần trong vectơ. Để chuyển đổi văn bản thành dữ liệu số, bạn chỉ cần đếm số lần xuất hiện của mỗi từ và đặt giá trị đó vào chỉ mục của vectơ tương ứng với từ đó. Wikipedia thực hiện một công việc tuyệt vời để mô tả quá trình chuyển đổi này. Vì độ dài của vectơ là cố định, rất khó để xử lý các từ mới không ánh xạ tới một chỉ mục, nhưng có nhiều cách để giúp giảm thiểu vấn đề này ( tính năng băm tra cứu ).

Phương pháp biểu diễn này có nhiều nhược điểm - nó không bảo toàn mối quan hệ giữa các từ liền kề và dẫn đến các vectơ rất thưa thớt. Nhìn vào n-gram giúp khắc phục vấn đề giữ gìn mối quan hệ từ ngữ, nhưng bây giờ chúng ta hãy tập trung vào vấn đề thứ hai, thưa thớt.

Thật khó để đối phó trực tiếp với các vectơ thưa thớt này (nhiều thư viện đại số tuyến tính làm rất kém việc xử lý các đầu vào thưa thớt), vì vậy thường bước tiếp theo là giảm kích thước. Để làm được điều đó, chúng ta có thể tham khảo lĩnh vực mô hình hóa chủ đề : Các kỹ thuật như Phân bổ Dirichlet tiềm ẩn (LDA) và Phân tích ngữ nghĩa tiềm ẩn (LSA) cho phép nén các vectơ thưa thớt này thành các vectơ dày đặc bằng cách biểu diễn một tài liệu dưới dạng kết hợp các chủ đề. Bạn có thể sửa số lượng chủ đề được sử dụng và làm như vậy để sửa kích thước của vectơ đầu ra được sản xuất bởi LDA hoặc LSA. Quá trình giảm kích thước này làm giảm đáng kể kích thước của vectơ đầu vào trong khi cố gắng làm mất một lượng thông tin tối thiểu.

Cuối cùng, sau tất cả các chuyển đổi này, bạn có thể đưa các đầu ra của quy trình mô hình hóa chủ đề vào các đầu vào của mạng thần kinh của bạn.


1
Hãy cho tôi biết nếu bạn có thêm câu hỏi và tôi sẽ cố gắng hết sức để cung cấp thêm một số chi tiết.
Madison ngày

Cảm ơn, điều đó cho tôi một số điều khoản tuyệt vời để tiếp tục khám phá!
Nửa đêm

Ngẫu nhiên, tôi có thể liên quan đến "băm tính năng" vì nó có vẻ rất giống với bộ lọc nở , mà tôi quen thuộc khi làm việc với mã tiền điện tử. Tôi tự hỏi liệu có hiệu quả hơn khi có chức năng băm liên quan đến một tính năng đầu vào với nhiều vị trí chỉ mục (kiểu bộ lọc nở hoa) thay vì cần một hàm băm thứ hai để đặt dấu hiệu của một chỉ mục ...
MidnightLightning

6

Cả hai câu trả lời từ @Emre và @Madison đều có thể đưa ra những quan điểm tốt về vấn đề hiện tại. Vấn đề là một trong những biểu diễn chuỗi của bạn dưới dạng một vectơ đặc trưng để nhập vào NN.

Đầu tiên, vấn đề phụ thuộc vào kích thước của chuỗi bạn muốn xử lý. Chuỗi dài chứa mã thông báo có thể (thường là từ) thường được gọi là tài liệu trong cài đặt này. Có các phương pháp riêng để xử lý các mã thông báo / từ riêng lẻ.

Có một số cách để thể hiện các tài liệu. Nhiều người trong số họ đưa ra giả định túi từ . Các loại đơn giản nhất biểu thị tài liệu dưới dạng vectơ của số lượng từ hoặc tần số thuật ngữ (tf). Để loại bỏ ảnh hưởng của độ dài tài liệu, thông thường mọi người thích bình thường hóa theo số lượng tài liệu mà một thuật ngữ hiển thị, tần suất tài liệu ( tf-idf ).

Một cách tiếp cận khác là mô hình hóa chủ đề, tìm hiểu cách biểu diễn dữ liệu chiều thấp hơn tiềm ẩn. LDALSI / LSA là những lựa chọn điển hình, nhưng điều quan trọng cần nhớ là điều này không được giám sát. Đại diện đã học sẽ không nhất thiết là lý tưởng cho bất kỳ việc học có giám sát nào bạn đang làm với NN của mình. Nếu bạn muốn làm mô hình chủ đề, bạn cũng có thể thử mô hình chủ đề được giám sát .

Đối với các từ riêng lẻ, bạn có thể sử dụng word2vec , sử dụng NN để nhúng các từ vào một không gian có kích thước tùy ý. Sự giống nhau giữa hai vectơ từ trong không gian đã học này có xu hướng tương ứng với sự giống nhau về ngữ nghĩa.

Một cách tiếp cận tiên phong gần đây là các vectơ đoạn , trước tiên học một mô hình từ giống như word2vec, sau đó xây dựng trên biểu diễn đó để học cách biểu diễn phân tán các bộ từ (tài liệu có kích thước bất kỳ). Điều này đã cho thấy kết quả hiện đại trong nhiều ứng dụng.

Khi sử dụng NN trong NLP, mọi người thường sử dụng các kiến ​​trúc khác nhau, như Mạng lưới thần kinh tái phát (như mạng Bộ nhớ ngắn hạn ). Trong một số trường hợp, mọi người thậm chí đã sử dụng Mạng thần kinh chuyển đổi trên văn bản.


Tôi nghĩ rằng word2Vec thực sự là câu trả lời chính xác nhất cho câu hỏi. Có một hướng dẫn Kaggle thực sự hay về cách huấn luyện và sử dụng một: kaggle.com/c/word2vec-nlp-tutorial/details/part-2-word-vector
jagartner

Cảm ơn, tôi đã quên liên kết word2vec, tôi sẽ thêm một liên kết (ngoài liên kết bạn liệt kê ở đây!)
jamesmf

3

Đây không phải là vấn đề về mạng nơ-ron mỗi lần, mà là về việc thể hiện dữ liệu văn bản trong học máy. Bạn có thể biểu diễn các bộ phim, diễn viên và chủ đề dưới dạng các biến phân loại. Cốt truyện phức tạp hơn; bạn có thể muốn một mô hình chủ đề cho điều đó, nhưng tôi sẽ bỏ qua nó cho đến khi bạn hiểu rõ mọi thứ. Nó thực hiện chính xác rằng "downsampling" văn bản mà bạn đã đề cập.

Hãy xem hướng dẫn này để tìm hiểu cách mã hóa các biến phân loại cho các mạng thần kinh. Và chúc may mắn!


Đáng lưu ý rằng đây không phải là một vấn đề rõ ràng trong tất cả các máy học, mà chỉ là một vấn đề khi tạo ra các vectơ đặc trưng, ​​không phổ biến trong học máy.
Slater Victoroff

Những loại máy học không sử dụng các tính năng?
Emre

Rừng ngẫu nhiên là một ví dụ tốt về một cái gì đó để có được một vectơ đặc trưng của loại bạn thấy trong các mạng lưới thần kinh không phải là một vấn đề. Rất nhiều phương pháp không giám sát cũng hoạt động trên các từ thô hơn là các vectơ đặc trưng. Lưu ý: Tôi không nói có những phương pháp không sử dụng các tính năng, chỉ có những phương pháp không dựa vào các vectơ có cấu trúc chặt chẽ.
Slater Victoroff

Tôi không biết ý của bạn là "cấu trúc chặt chẽ".
Emre

Cấu trúc chặt chẽ là một vectơ 1d của unint8 trái ngược với danh sách chứa từ điển, ma trận trọng số và một chuỗi các chuỗi
Slater Victoroff

0

Tôi đã thử 2 cách sau đây để triển khai thử nghiệm-n-test các mạng thần kinh bằng văn bản. Cái thứ hai hoạt động khá tốt, nhưng có những hạn chế.

  1. Tạo từ vựng bằng cách sử dụng mã thông báo word2vect hoặc NLTK / từ tùy chỉnh và gán chỉ mục cho mỗi từ. Chỉ số này đại diện cho từ dưới dạng số.

    Thách thức:

    • Các chỉ mục phải được "chuẩn hóa" bằng cách sử dụng tỷ lệ tính năng.
    • Nếu đầu ra của mạng nơ ron thậm chí có một biến thể nhỏ, thì đầu ra có thể là một chỉ mục cho từ không mong muốn (ví dụ: nếu đầu ra dự kiến ​​là 250; nhưng NN xuất ra 249 hoặc 251, thì đó có thể là đầu ra gần từ ngữ cảnh số; nhưng chúng là chỉ mục cho các từ khác nhau). NN định kỳ để tạo chỉ số đầu ra có thể được tận dụng ở đây.
    • Nếu các từ mới được thêm vào từ vựng, thì các chỉ mục mã thông báo sẽ được thu nhỏ lại. Mô hình được đào tạo với các giá trị được chia tỷ lệ trước đó có thể trở nên không hợp lệ và phải được đào tạo lại.
  2. Sử dụng ma trận danh tính, ví dụ cho các từ "n" sử dụng ma trận "nx n" hoặc (n-1 x n-1) trong đó mỗi hàng và cột đại diện cho một từ. Đặt "1" trong ô giao nhau và "0" tại các vị trí nghỉ. ( tham khảo )

    Thách thức:

    • Mỗi giá trị đầu vào và đầu ra là vector "nx 1". Đối với một từ vựng kích thước lớn, nó là một tính toán cồng kềnh và chậm hơn.
    • Nếu các từ mới được thêm vào từ vựng, thì ma trận danh tính (tức là vectơ từ) sẽ được tính lại. Mô hình được đào tạo với các vectơ được tính toán trước đó có thể trở nên không hợp lệ và phải được đào tạo lại.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.