Tôi không nghĩ câu hỏi của bạn được đặt đúng: Ngram là một công cụ, không giải quyết được vấn đề, vì vậy không có " trạng thái của nghệ thuật "trong ngrams.Như @Hooked đã chỉ ra, một ngram là một loại hàm tương quan tự động (hoặc "hàm tự động"). Vì vậy, những gì bạn thực sự muốn biết là nếu có bất kỳ vấn đề mà các nhà nước của các giải pháp nghệ thuật liên quan đến ngrams dài.
Đối với các ứng dụng số như mô hình tài chính hoặc thời tiết phù hợp hoặc nhận dạng giọng nói, bạn chắc chắn sẽ sử dụng vectơ kích thước > 3. Ví dụ: Mô hình Ẩn Markov tự động kích hoạt phù hợp với chức năng thay thế của các số đo n cuối cùng, trong đó n có thể lớn vừa phải nếu các trạng thái trong quá khứ có liên quan để dự đoán tương lai.
Nhưng tất cả các ví dụ của bạn đều liên quan đến từ ngram và tôi không thể nghĩ ra bất kỳ tác phẩm nào tìm thấy n> 3 hữu ích trong miền đó. Tôi không nghĩ rằng đó là một câu hỏi về chi phí tính toán hoặc tìm đủ dữ liệu đào tạo: Tương quan tự động bề ngoài trong ngôn ngữ dường như suy ra sau 3 từ hoặc lâu hơn. Ví dụ ngẫu nhiên: this article cố gắng diễn giải lại định luật Zipf về nội dung thông tin dựa trên ngram. Họ xem xét n tối đa 4, nhưng có được mối tương quan tổng thể cao nhất đối với số lượng trigram.
Tôi không có ý nói rằng n> 3 là không hữu ích; nhưng quan sát của bạn rằng nó dường như không xuất hiện nhiều cũng được thành lập.
Nhưng lưu ý rằng sự phức tạp của tính ngrams trong một văn bản không phải là một vấn đề: Nếu bạn có một corpus tokenized chiều dài L, bạn có thể thu thập tất cả ngrams của corpus như thế này:
for i in range(0, L-n):
tuple = corpus[i:i+n]
ngrams[tuple] += 1
Như bạn có thể thấy điều này chỉ yêu cầu O (L) các bước, tức là tuyến tính có kích thước tuyến tính và không phát triển với n. Vì vậy, thu thập ngrams của bất kỳ kích thước là một vấn đề không. Nhưng số lượng ngrams có thể nhanh chóng nấm. Để minh họa, nếu bạn phân biệt 32 thẻ thư (chữ cái và một số dấu chấm câu), có 1024 chữ cái lớn nhưng 1048576 tetragram. Để tìm đủ số lượng các bảng tần số, bạn cần thêm văn bản theo cấp số nhân.
Đối với từ ngrams, vấn đề thưa thớt thậm chí còn tệ hơn, vì bạn không chỉ có nhiều hơn hơn 32 mã thông báo khác nhau, nhưng kích thước từ vựng tăng (chậm) với kích thước tài liệu: tài sản "đuôi dài" nổi tiếng . Vì vậy, dữ liệu của bạn sẽ thưa thớt (ngay cả đối với số lượng nhỏ n) cho dù bạn thu thập được bao nhiêu. Sau đó, bạn sẽ cần phải phù hợp với các mô hình thống kê phức tạp, có chi phí tính toán phụ thuộc vào số lượng ngram riêng biệt.
Kết quả là, thưa thớt luôn là một vấn đề trong các ứng dụng ngram từ (do đó "làm mịn" thường là cần thiết). Nếu bạn google "ngram thưa thớt" bạn sẽ tìm thấy một tấn tài liệu tham khảo.
Điều này có thể không đạt đến mức độ thông tin Chú thích đang tìm kiếm, nhưng video này từ Pycon 2012 thực hiện một công việc khá tốt giải thích những điều cơ bản về tính toán n-gram trong python (và sử dụng chúng để xây dựng một công cụ tìm kiếm): http://pyvideo.org/video/715/building-a-python-based-search-engine. Đối với bất cứ ai khác tình cờ về câu hỏi này. – Wilduck
"Chi phí tính toán" của ngrams tính toán là không đáng kể: Bạn có thể thực hiện nó trong một lần truyền qua kho dữ liệu của bạn. Ngay cả khi lưu trữ các ngram cao cấp cũng không phải là một vấn đề lớn. Chi phí thực tế là cho n lớn hơn, bạn cần một kho dữ liệu lớn hơn và lớn hơn để khắc phục vấn đề thưa thớt. – alexis
@alexis: Sẽ rất tuyệt nếu bạn có thể cung cấp thêm thông tin. Cụ thể, một cái gì đó liên quan đến vấn đề sparsity, bất kỳ nghiên cứu cho thấy "tính toán trên không tính toán của n-gram là không đáng kể"? Cảm ơn bạn. – Legend