Aside

Nội dung

Một số chú ý

  1. Đây chỉ là chia sẻ mang tính cá nhân của người viết
  2. Để tránh hiểu nhầm, một số từ tiếng Anh trong bài đã được Việt hóa. Ví dụ:
    • Data scientist: nhà khoa học dữ liệu, nói một cách vắn tắt, đó là người có kỹ năng về toán thống kê hơn kỹ sư phần mềm, và là người có kỹ năng lập trình tốt hơn một nhà thống kê.
    • Data science: khoa học dữ liệu, chỉ quá trình sử dụng các kỹ thuật và mô hình để có thể lấy được những kết quả quan trọng trong dữ liệu, giúp tạo thành các sản phẩm dữ liệu (data product). (1)
    • Machine Learning: học máy.
    • Visualization: biểu diễn trực quan, biểu diễn.

Nội dung chính

Trong kỷ nguyên Dữ liệu lớn như hiện nay, việc tìm hiểu và áp dụng các công nghệ liên quan nhằm mang lại hiệu quả kinh tế cao hơn đang là đòi hỏi bức thiết của nhiều doanh nghiệp.

Nhu cầu nhân sự trong lĩnh vực này đang ngày một gia tăng. Theo dự báo (2) của học viện toàn cầu McKinsey: vào năm 2018, riêng nước Mỹ có thể đối mặt với tình trạng thiếu hụt từ 140 000 tới 190 000 chuyên gia phân tích dữ liệu, thiếu 1.5 triệu nhà quản lý biết sử dụng các công cụ của Dữ liệu lớn để thực hiện việc ra quyết định hiệu quả hơn. Những người có kỹ năng về khoa học dữ liệu (Data Science) trong hồ sơ LinkedIn đang được chào đón hơn bao giờ hết.

Vậy làm sao để có thể trở thành nhà khoa học dữ liệu? Bài viết này cung cấp cho các bạn một số bước cơ bản cần thực hiện.

1. Học thêm toán học, thống kê và học máy

maths-ftr

Đây là điều bắt buộc. Nếu các bạn học để áp dụng, thì có thể yêu cầu không cần cao, có thể chỉ cần dừng ở bước hiểu các khái niệm, các mô hình và thuật toán liên quan.

Thêm vào đó, bạn nên đọc tài liệu Xác suất thống kê bằng tiếng Anh vì hai lý do:

  • Tài liệu tiếng Việt thường không kèm theo thuật ngữ tiếng Anh tương ứng. Nên khi đọc tài liệu nước ngoài, đôi khi ta gặp khó khăn trong việc hiểu và nắm bắt bản chất của vấn đề.
  • Sách về Khoa học dữ liệu tiếng Việt đang tương đối thiếu. Tài liệu tiếng Anh thì phong phú hơn nhiều.

Một số khóa học, tài liệu online mà các bạn có thể tham khảo:

Và tất nhiên, một số ebook:

2. Học lập trình

computerprogramming

Việc trang bị cho mình tư duy về lập trình, bước đầu tìm hiểu kiến trúc hệ thống máy tính, mạng Internet… Ngôn ngữ lập trình có thể sử dụng là Java, Python, Scala, R, Javascript… “Ngôn ngữ là lớp vỏ của trí tuệ”, các bạn cần nắm được đặc điểm riêng có của mỗi loại ngôn ngữ, các cấu trúc điều khiển, các kỹ thuật liên quan… trước khi triển khai ý tưởng của mình trong tình huống cụ thể. Ví dụ:

  • Python là ngôn ngữ rất dễ học cho người bắt đầu lập trình, có nhiều thư viện liên quan tới xử lý ngôn ngữ tự nhiên (NLP hay Natural Language Processing), học máy để sử dụng như: scikit-learn, nltk… Python là ngôn ngữ được sử dụng nhiều trong tính toán khoa học.
  • Java là ngôn ngữ lập trình hướng đối tượng, được thiết kế để biên dịch thành bytecode, giúp Java chạy được trên nhiều nền tảng khác nhau mà máy ảo Java hỗ trợ. Cú pháp Java được vay mượn nhiều từ C & C++ nhưng có cú pháp hướng đối tượng đơn giản hơn và ít tính năng xử lý cấp thấp hơn… Java là ngôn ngữ chính để lập trình trên nền tảng Android, và nhiều hệ thống hạ tầng Dữ liệu lớn đều được xây dựng dựa trên công nghệ Java. Vì vậy, việc đầu tư vào học lập trình Java là một lựa chọn sáng suốt.

Một số tài liệu mà các bạn có thể tham khảo như:

3. Hiểu về cơ sở dữ liệu

Khi bắt đầu tìm hiểu, ta thường làm việc với file văn bản (text file). Tuy nhiên, khi áp dụng vào trong thực tế, cơ sở dữ liệu thường là cách hay sử dụng để lưu trữ và xử lý dữ liệu.

Từng giờ, từng giây trên thế giới có hàng chục triệu người đang sử dụng dịch vụ của các hãng công nghệ lớn trên thế giới như Google, Yahoo, Microsoft, Facebook…. Chỉ tính riêng công việc trả về kết quả tìm kiếm mỗi khi người dùng gõ từ khóa vào ô tìm kiếm, Google dã phải vận hành hàng loạt server đặt khắp thế giới, với cường độ hoạt động 24/7, 365 ngày/ năm không có lấy một giây ngơi nghỉ, riêng việc phục vụ nhu cầu tìm kiếm đã đòi hỏi các hệ thống của Google xử lý xấp xỉ 20 petabyte dữ liệu mỗi ngày, một con số mà người bình thường khó có thể tưởng tượng ra nổi.

Ở tầm vóc này, mọi sai lầm dù là nhỏ nhất, dù là trong khâu thiết kế hay triển khai cũng có tiềm năng gây hậu quả lâu dài. Mọi công việc từ bổ sung dung lượng lưu trữ đến thay đổi đôi chút kết cấu cơ sở dữ liệu đều sẽ cần được được cân nhắc kỹ lưỡng.

Cơ sở dữ liệu bao gồm nhiều loại như: SQL, NoSQL, Graph Database, In-Memory Database… Mỗi loại lại có những đặc điểm riêng có, phù hợp cho những bài toán xác định. Một số hệ cơ sở dữ liệu thông dụng như: MySQL, PostgreSQL, MongoDB, Redis, HBase, Neo4j,…

database
Cơ sở dữ liệu

Tài liệu tham khảo:

4. Nghiên cứu về Khoa học dữ liệu

Khoa học dữ liệu là nơi hợp nhất của nhiều lĩnh vực liên quan như khoa học máy tính, toán, thống kê, lý thuyết xác suất, học máy, kỹ nghệ phần mềm, tính toán phân tán, biểu diễn trực quan dữ liệu. Tất cả những lính vực trên đều đã bắt đầu từ cách đây vài thập kỷ, nhưng chỉ được kết dính lại với nhau trong kỷ nguyên Dữ liệu lớn. Khoa học dữ liệu phát triển rất nhanh để đáp ứng lại nhu cầu của thực tế khi xử lý:

  • Khối lượng lớn dữ liệu (Volume of Data): Theo tài liệu của Intel vào tháng 9/2013, hiện nay thế giới đang tạo ra 1 petabyte dữ liệu trong mỗi 11 giây và nó tương đương với một đoạn video HD dài 13 năm. Bản thân các công ty, doanh nghiệp cũng đang sở hữu Big Data của riêng mình, chẳng hạn như trang bán hàng trực tuyến eBay thì sử dụng hai trung tâm dữ liệu với dung lượng lên đến 40 petabyte để chứa những truy vấn, tìm kiếm, đề xuất cho khách hàng cũng như thông tin về hàng hóa của mình. (3)
  • Tốc độ thu thập dữ liệu (Velocity of collected Data): Dữ liệu đến từ nhiều nguồn khác nhau, nhất là các dữ liệu từ các cảm biến, được cập nhật từng giờ, từng phút.
  • Sự đa dạng của dữ liệu (Variety of Data): thông tin được cập nhật trên các trang web mạng xã hội, những bức ảnh và video kỹ thuật số được đưa lên mạng, dữ liệu giao dịch của các hoạt động mua sắm trên mạng… dưới mọi hình thức khác nhau (có cấu trúc, phi cấu trúc, bán cấu trúc)

Đây là những thành phần cơ bản, tạo nên khái niệm 3V của Dữ liệu lớn.

Quá trình xử lý trong Khoa học dữ liệu có thể được chia thành các bước như sau:
data_science_processtrong đó:

  • 1. Xác định vấn đề: Tại bước này, ta đặt các câu hỏi liên quan như: mục đích của ta là gì? Ta có thể làm những gì khi có đầy đủ dữ liệu? Ta có thể phán đoán (predict) hay ước lượng (estimate) được gì từ dữ liệu?
    Ví dụ: Làm thế nào để xây dựng hệ thống phát hiện thư rác? Với nội dung một bức thư cho trước, liệu ta có thể phán đoán xem: liệu nội dung đó có nên được gán nhãn là thư rác?
  • 2. Thu thập dữ liệu: Tìm cách lấy các dữ liệu cần thiết. Ở bước này cần chú ý tới mức độ liên quan của dữ liệu tới vấn đề cần giải quyết. Một số khía cạnh khác liên quan tới tính riêng tư (privacy) cũng nên được xem xét thỏa đáng.
    Ví dụ: Cho bài toán phát hiện thư rác, ta có thể sử dụng thư của những người tham gia dự án. Cho bài toán điều tra phản ứng của khách hàng khi ra mắt sản phẩm mới, ta có thể sử dụng dữ liệu từ mạng xã hội
  • 3. Tiền xử lý dữ liệu: Dữ liệu mà ta thu được có thể không đầy đủ hoặc thậm chí bị sai lệch, chứa những giá trị bất thường. Nhiều tập dữ liệu (Data Corpus) có số đặc trưng (feature) lớn, không phù hợp với năng lực tính toán hiện tại. Ta cần có những biện pháp để khắc phục những vấn đề đó như: phát triển các thuật toán phát hiện giá trị bất thường & làm giảm ảnh hưởng của nó, giảm chiều, chuyển sang nghiên cứu ở không gian khác…
    Ta thường xuyên dùng các công cụ như: weka, rstudio, ggvis, d3js, vega

chord_diagram
Kết quả biểu diễn với dữ liệu từ các đời tổng thống Mỹ

  • 4. Xây dựng mô hình: Ở mức độ sơ lược, ta tìm hiểu mô hình dữ liệu, từ đó áp dụng các thuật toán phù hợp để xác định tính đúng đắn của mô hình và đem áp dụng vào thực tế. Số lượng thuật toán rất nhiều, có thể khiến bạn bị ngợp. Hình sau mô tả họ các thuật toán trong scikit-learn algorithm_ensembles
    Tuy nhiên, vẫn có một số phương pháp thật sự nổi trội mà ta cần tập trung vào. Chẳng hạn, đối với phương pháp phân loại (classification method), các phương pháp tốt nhất là: SVM, boosting ensemble, neural network.
    Kết quả là tại bước này ta sẽ có những báo cáo với biểu diễn trực quan về những phát hiện chính trong dữ liệu đầu vào.
  • 5. Đánh giá: Bước này sẽ trả lời câu hỏi là: Ta đã biết thêm được điều gì? Kết quả tìm được liệu có thể lý giải được? Ta sẽ quay lại bước 1 với những hiểu biết mới.

Tài liệu tham khảo:

5. Làm quen với công nghệ Dữ liệu lớn

Khi dữ liệu thay đổi về lượng, sẽ dẫn đến việc thay đổi về chất. Để nắm bắt được ‘chất’, khi tiến hành xử lý dữ liệu trên quy mô lớn, ta cần những công cụ mới, công nghệ mới. Gần đây, ta nghe nhiều đến hàng tá công nghệ như: Apache Hadoop, YARN, MapReduce, Apache Spark, Apache Samza, Apache Storm, Apache Kafka… (Danh sách các dự án Apache nguồn mở liên quan, các bạn có thể xem ở đây). Chính tính phong phú đa dạng này và bản thân tính phức tạp của các vấn đề mà mỗi dự án giải quyết, làm cho những người mới bắt đầu luôn tự hỏi là nên nghiên cứu cái gì, làm cái gì trước? Đặc biệt nhất là trong bối cảnh lĩnh vực Dữ liệu lớn đang chứng kiến nhiều biến chuyển đáng kinh ngạc khi Hadoop trình làng phiên bản mới.

hadoop
Mô hình Hadoop 1.0 và 2.0

Phiên bản mới mang tính linh động cao trong kiến trúc hệ thống. Bên cạnh mô hình tính toán (Computational model) MapReduce, YARN cho phép ta có thêm các mô hình tính toán khác cùng hoạt động như các mô hình của Apache Spark (cho dữ liệu tĩnh, hay Data at Rest) hay như Apache Storm (cho dữ liệu động, Data in Motion)… Điều này giúp cho Hadoop 2.0 trở thành hệ điều hành dữ liệu (Data Operating System) đúng nghĩa hơn, giúp hệ sinh thái bao quanh sinh động hơn rất nhiều so với Hadoop 1.0.

DataOSHệ điều hành dữ liệu với Hadoop 2.0

Thiết nghĩ việc tìm hiểu và áp dụng công nghệ dữ liệu lớn, nên bắt đầu bằng việc tìm hiểu các thành phần trong hệ hiều hành này, từ mức thấp lên mức cao. Bên cạnh đó, công nghệ Dữ liệu lớn sẽ còn thay đổi nhiều trong thời gian tới. Việc chạy theo công nghệ cũng nên được cân nhắc kỹ trong mối liên quan với vấn đề mà doanh nghiệp & tổ chức cần giải quyết.

Tài liệu tham khảo:

6. Thêm các trải nghiệm

Bạn có thể:

  • Tham gia các cuộc thi do Kaggle tổ chức: Có rất nhiều cuộc thi được tổ chức trên Kaggle (4), với nhiều mức độ từ dễ đến khó, thậm chí có những cuộc thi có giải thưởng lớn. Sau mỗi cuộc thi đều có phần nêu lời giải từ các đội, góp phần chia sẻ nhiều kiến thức hơn liên quan tới Học máy.
    kaggleTrang Web của Kaggle luôn có nhiều cuộc thi
  • Tham gia các cộng đồng trên mạng, theo dõi các chuyên gia trong lĩnh vực này: Các bạn có thể theo dõi Quora, Data Science 101, BigSonata,DataTau… Cộng đồng Việt Nam trên facebook về lĩnh vực này cũng khá sôi động như: BigData Startup, Vietnam Data Scientists, IT Leader Club
  • Thử nghiệm với các ý tưởng, dự án nhỏ: Tìm hiểu thực tế sinh động để phát hiện ra nhu cầu, các bạn hoàn toàn có thểtìm hiểu & phát triển các dịch vụ & sản phẩm hữu ích áp dụng công nghệ Dữ liệu lớn từ đơn giản cho tới phức tạp. Số lượng các công ty startup trong lĩnh vực này đang ngày một nhiều hơn, đó cũng là cơ hội cho chính bạn theo dòng chảy của thế giới.

7. Tìm nghề nghiệp hoặc các chương trình thực tập liên quan

Đây là cách tốt nhất để bạn có điều kiện nghiên cứu, tiếp xúc và áp dụng công nghệ Dữ liệu lớn vào trong cuộc sống. Một số công ty như FPT, VCCorp, Vingroup… đều có nhu cầu tuyển dụng nhân sự trong mảng này.

Đặc biệt, công ty Adatao (5) do 2 co-founder người Việt Nam thành lập, vừa gọi vốn thành công 13 triệu Đôla Mỹ (series A), đang thành lập chi nhánh tại Sài Gòn cũng đang dáo diết tìm kiếm tài năng trong lĩnh vực này tại Việt Nam. Các bạn quan tâm, có thể liên hệ trực tiếp với anh Thong Do để tìm kiếm cơ hội cho mình.

8. Kết luận

Trên đây là những nhận định chủ quan của người viết. Mình rất cảm ơn nếu các bạn có những góp ý, bổ sung để hoàn thiện bài viết.

Khi học trò sẵn sàng, thầy giáo sẽ suất hiện
(Châm ngôn Phật giáo)

Chúc các bạn thành công trên con đường đã chọn!

9. Tham khảo

  1. Data Science, Wikipedia
  2. Why Data Science Jobs Are in High Demand, Havard Extension Hub, 2014.
  3. Big Data là gì và người ta khai thác, ứng dụng nó vào cuộc sống như thế nào?, TinhTe.vn
  4. Kaggle Competitions
  5. Adatao Emerges With $13M In Funding And Visions Of Changing Big Data, 2014, TechCrunch.com

Advertisements
Aside

Dữ liệu như thế nào có thể bán được? Làm sao các nhà khoa học Dữ liệu (Data scientist) có thể kiếm tiền bằng cách bán các dữ liệu được tự động sinh ra như: dữ liệu thô (raw data), dữ liệu nghiên cứu (thông qua các báo cáo) hoặc các dự đoán. Tóm lại, có thể làm giàu bằng cách sử dụng hệ thống sinh/tập hợp dữ liệu, tự làm việc ở nhà, không cần người làm thêm, và có thể không cần tương tác trực tiếp với khách hàng.

Sau đây là một số công ty kiếm tiền bằng cách bán dữ liệu:

  • Thống kê về lưu lượng Web cho phép các nhà quảng cáo so sánh các publisher để tối ưu hóa lưu lượng hoặc định giá quảng cáo cho Websit, hoặc chỉ để mục đích kiểm tra mức độ cạnh tranh giữa các site nói chung. Compete.com, Alexa.com và Quancast.com là 3 ví dụ điển hình. Họ cũng cung cấp demographics và từ khóa cho hàng triệu Website mà họ theo dõi.
  • Dữ liệu về tiền lương và công việc cho hàng ngàn vị trí tuyển dụng. Các công ty như Payscale, Glassdor.com và Indeed.com thu thập dữ liệu về lương từ hàng triệu thông tin về người dùng và thông báo tuyển dụng. Các bản báo cáo về nghề nghiệp có thể được sử dụng để dự đoán kinh tế và trong các mô hình trao đổi chứng khoán (stock trading model)
  • Danh sách các từ khóa, kèm theo với số lần hiển thị, click và CPC (Cost per click) trung bình, cũng như các từ khóa liên quan, có thể giúp các nhà quảng cáo trả thêm tiền cho những từ khóa tốt hơn. Google cung cấp dịch vụ này qua API và có tính phí.
  • Danh sách đen và danh sách trắng của IP hoặc địa chỉ email sử dụng trong lừa đảo, mạng Botnet hoặc spam forum. Một ví dụ về công ty buôn bán loại dữ liệu này là ProjectHoneyPot.org.
  • Bán các dự đoán về giá của các loại cổ phiếu trong thị trường chứng khoán…

Để có thêm cái nhìn đa chiều hơn về vấn đề này, các bạn có thể đọc trong quyển sách “Miễn phí- Tương lai của một mức giá cách mạng” do Chris Anderson, tổng biên tập tạp chí Wired, viết. Ông là một trong những tiếng nói am tường, sâu sắc có trọng tâm ở nền kinh tế mới. Trong một loạt các bài báo và cuốn sách mang tính đột phá, ông đã chỉ ra các xu hướng quan trọng mới trong nền kinh tế và mô tả các mô hình kinh doanh.

free“Miễn phí là một từ có quyền năng siêu việt”, miễn phí không có nghĩa là phi lợi nhuận mà có nghĩa rằng sản phẩm phải đi trên con đường gián tiếp đến với thị trường. Đó là thông điệp được tác giả gửi đến bạn đọc ngay trong chương đầu tiên của Miễn Phí – Tương Lai Của Một Mức Giá Cách Mạng.

Miễn Phí – Tương Lai Của Một Mức Giá Cách Mạng đã lấy dẫn chứng ngay từ một sự cố diễn ra năm 2008, khi nhóm thực hiện series hài kịch Monty Python đã tuyên chiến với những người đã phát tán trái phép các chương trình của nhóm. Nhóm lập một kênh chính thức trên Youtube, cung cấp miễn phí những video chất lượng cao. Ba tháng sau thử nghiệm đó, các DVD Monty Python đã leo lên hạng nhì trong danh sách phim và chương trình TV bán chạy nhất của Amazon, với doanh số tăng 230 lần.

Miễn phí của thế kỷ XXI không phải là thứ mưu mẹo, trò lừa gạt nhằm chuyển tiền từ túi của người này sang túi của người khác. Miễn phí của thế kỷ này hoàn toàn mới, một khả năng mới phi thường làm giá thành của sản phẩm và dịch vụ giảm xuống gần bằng không. Sản phẩm miễn phí hiện nay đều có chất lượng tốt. Tuy nhiên chỉ cần bỏ thêm chút phí, người dùng có thể nâng cấp lên tốt hơn. Đó mới là nguyên tắc hoạt động cốt lõi để đem lại lợi nhuận cho doanh nghiệp.

Miễn Phí – Tương Lai Của Một Mức Giá Cách Mạng là một cuốn sách nói về các mô hình định giá cho phép miễn phí sản phẩm và dịch vụ đối với người tiêu dùng. Từ đó, bạn đọc có cái nhìn tổng quan về các dịch vụ “miễn phí” quanh mình và ứng dụng nó vào công việc kinh doanh một cách thông minh.

Tuy nhiên, việc bán dữ liệu từ người dùng cũng cần phải rất cẩn trọng, để không làm ảnh hưởng tới tính riêng tư của người dùng.

Aside

Xin chào các bạn đến với phần đầu của chuyên mục Hỏi & Đáp. Nếu các bạn có bất cứ câu hỏi nào về Big Data, các bạn có thể comment vào bên dưới hoặc liên hệ với chúng tôi qua trang Facebook, Twitter.

Tổng quan

Hệ thống gợi ý (Recommendation System) là ứng dụng rõ ràng nhất và hữu dụng nhất của Khoa học dữ liệu (Data Science). Bạn có thể đã gặp ứng dụng của hệ thống này khi qua các trang Amazon, Netflix, Vinabook … Ngoài nội dung mà bạn đang xem, các trang nói trên còn hiển thị các nội dung liên quan, giữ người dùng ở lại trên trang web lâu hơn, tăng được số lượng khách hàng tiềm năng…

vinabook

Một ứng dụng của Hệ gợi ý trên Vinabook.com 

Nội dung liên quan nói trên chính là các gợi ý, là kết quả được tính toán dựa trên việc thu thập dữ liệu về người dùng như khi mua hàng, khi đưa ra các đánh giá cá nhân. Việc thực hiện tính toán được xây dựng trên các thuật toán Học máy (Machine Learning), đưa ra các dự đoán tốt nhất về sản phẩm mà người dùng có thể thích, giúp gia tăng số lượng sản phẩm bán được.

Hệ thống gợi ý mang lại nhiều lợi ích to lớn cho doanh nghiệp, bao gồm:

  • Khả năng đưa ra các dịch vụ cá nhân hóa, hướng tới từng đối tượng khách hàng cụ thể.
  • Tăng mức tín nhiệm và trung thành của khách hàng.
  • Tăng doanh thu, tăng CTR (Click-through rate)…
  • Thêm hiểu biết về khách hàng

Hệ thống gợi ý đã và đang thay đổi cách chúng ta tìm kiếm sản phẩm, thông tin và các cá nhân khác. Công nghệ đằng sau hệ thống này đã được phát triển từ cách đây 20 năm, với nhiều công cụ để chúng ta có thể xây dựng một hệ thống gợi ý hiệu quả. Một số thuật toán hay được sử dụng chính như:

  • Lọc dựa trên nội dung (content-based filtering)
  • Lọc cộng tác dựa trên mô hình người dùng- người dùng (user-user collaborative filtering)
  • Lọc cộng tác dựa trên mô hình hàng hóa- hàng hóa (item-item collaborative filtering)
  • Giảm chiều ( dimensionality reduction)

Hệ thống gợi ý hoạt động như thế nào?

Trong mô hình truyền thống, có các thành phần “người dùng” và “hàng hóa”. Người dùng được mô tả bằng các thông tin liên quan như độ tuổi, giới tính, vị trí địa lý… Hàng hóa được mô tả bởi các yếu tố như: giá cả, trọng lượng… Có các tương tác giữa người dùng và hàng hóa thông qua các hành vi như: mua bán, download… Ví dụ như: người dùng A mua quyển sách B, người dùng X đánh giá sản phẩm Y với mức 5 sao…

Thuật toán lọc cộng tác là cách tiếp cận thường thấy để sinh ra các gợi ý. Nó được sử dụng bởi các site thương mại điện tử lớn, với nhiều biến thể, áp dụng cho nhiều loại hàng hóa như: sách, phim, quần áo… Cách tiếp cận phổ biến là sử dụng Trí tuệ đám đông (Wisdom of the Crowd) để gợi ý.

Ý tưởng chính của thuật toán trên dựa trên việc: nhiều người dùng có cùng sở thích trong quá khứ sẽ có khả năng cùng sở thích trong tương lai. Ví dụ: hai người dùng A & B có chung sở thích ăn uống, họ đã mua các đồ ăn giống nhau. Nếu B thích thêm Cocacola, thì A cũng có thể thích, nên ta có thể gợi ý cho A mua thêm Cocacola.

collaborative_filtering

Trong cách tiếp cận này, chúng ta quan tâm tới tương tác giữa người dùng và hàng hóa, và sử dụng thông tin về các đánh giá về sản phẩm mà người dùng trực tiếp hoặc gián tiếp cung cấp để thực hiện tính toán. Tương tác đó có thể được biểu diễn dưới dạng ma trận (trong thực tế, ma trận này tương đối thưa). Mỗi ô trong ma trận chứa dữ liệu mô tả tương tác giữa người dùng và hàng hóa. Dữ liệu có nhiều dạng, ví dụ đánh giá sản phẩm là tốt hay không tốt, hay chỉ đơn thuần là đánh dấu việc người dùng có tương tác với sản phẩm đó.

collaborative_filtering_matrix

Thuật toán có khả năng suy diễn và điền vào các ô còn thiếu trong ma trận. Ví dụ đưa ra dự đoán về đánh giá của người dùng X đối với bộ phim A khi ta đã biết đánh giá của X với bộ phim B. Đơn giản là: chúng ta có thể tìm tất cả người dùng đã đánh giá cả hai bộ phim A và B, dựa trên đó có thể tính đánh giá trung bình của X đối với B.

Trong thực tế việc đảm bảo hệ thống gợi ý có thể hoạt động tốt khi hệ thống phát triển trên quy mô lớn là điều sống còn cho nhiều doanh nghiệp, Các hệ thống như Apache Hadoop, Apache Spark cùng thư viện học máy MLib… có thể giải quyết tốt nhu cầu đó.

Kết luận

Bên cạnh các phương pháp marketing liên quan tới SEO, việc sử dụng Hệ thống gợi ý là một cách tiếp cận tốt để tăng khả năng cạnh tranh của doanh nghiệp thương mại điện tử trong kỷ nghuyên dữ liệu lớn

Tham khảo

  1. Collaborative Filtering: A Tutorial, by William W. Cohen. Center for Automated Learning and Discovery. Carnegie Mellon University
  2. A Programmer’s Guide to Data Mining, chapter 2: Collaborative Filtering, by Ron Zacharski.
  3. Collaborative Filtering : Implementation with Python!

Aside

QVừa qua, tạp chí công nghệ uy tín, MIT Technology Review, đã thông báo kết quả giải thưởng toàn cầu TR35 2014, xướng danh sách 35 nhà sáng tạo trẻ có cống hiến xuất sắc trong các lĩnh vực công nghệ, trong đó có Tiến sỹ (TS) Lê Viết Quốc. Sinh năm 1982 trong ngôi làng nhỏ ở Hương Thuỷ – Huế, TS Quốc đã có những bước đi khá ngoạn mục trong lĩnh vực trí tuệ nhân tạo ở Đại học Stanford. Anh hiện đang làm việc cùng với những chuyên gia hàng đầu cùng lĩnh vực ở Google và mới trở thành giáo sư đại học Carnegie Mellon University (CMU), một ngôi trường danh tiếng khác của Mỹ.

 

Hiện nay, phần lớn các phần mềm trí tuệ nhân tạo thường cần rất nhiều tương tác từ phía người sử dụng trước khi có thể đem sử dụng vào các bài toán thật trong thực tế. Người dùng phải tiến hành “dạy” phần mềm dựa trên những dữ liệu có sẵn. Ví dụ như, trong bài toán phát hiện khuôn mặt trong bức ảnh, ta phải cung cấp cho phần mềm những bức ảnh có và không có khuôn mặt. Sau đó, ta phải “nói” cho phần mềm những tính chất của dữ liệu mà nó cần tập trung xử lý: hình dạng của mũi, hình dạng của miệng… Nói chung, quá trình “dạy” cho phần mềm “hiểu” đòi hỏi rất nhiều thời gian, công sức.

 

Nhận thấy những hạn chế trong cách tiếp cận truyền thống, trong thời gian tại Đại học Standford, TS Quốc tập trung nghiên cứu vào việc làm sao máy tính có khả năng tự học. TS Quốc đã tìm ra cách để tăng tốc đáng kể quá trình tính toán bằng việc xây dựng Mạng Nơron nhân tạo (neural network) hiệu quả hơn, có khả năng xử lý khối lượng dữ liệu lớn hơn hàng nghìn lần. Google, nhanh chóng nhận ra những ứng dụng thực tế của nghiên cứu trên, đặc biệt trong tìm kiếm hình ảnh và nhận dạng giọng nói, đã mời TS Quốc về làm việc dưới sự hướng dẫn của Andrew Ng, giáo sư nổi tiếng trong lĩnh vực Trí tuệ nhân tạo. Trong năm 2012, kết quả nghiên cứu được công bố, hệ thống của họ có khả năng tự học để phát hiện mèo, cơ thể người và hơn 3000 đối tượng khác, chỉ bằng việc xử lý hơn 10 triệu bức ảnh từ video trên Youtube. Điều này đã tạo nên cuộc chạy đua giữa Facebook, Microsoft và các hãng công nghệ khác, đầu tư mạnh tay hơn vào Deep Learning.

Giáo sư Andrew Ng nói chuyện về Deep Learning và học không giám sát

Được biết, tạp chí Technology Review trước đây cũng đã trao giải thưởng TR35 cho nhiều nhà khoa học tên tuổi khác như: Larry Page và Sergey Brin (đồng sáng lập Google), Linus Torvalds (cha đẻ của hệ điều hành Linux), Jonathan Ive (nhà thiết kế làm việc tại Apple)… Việc TS Quốc nhận được giải thưởng TR35 2014 là một điều tự hào và đáng khích lệ cho cộng đồng khoa học Việt Nam nói chung và lĩnh vực Trí tuệ nhân tạo nói riêng.

 

Tham khảo:

1. TS Lê Viết Quốc: Những ý tưởng khác lạ mới có thể thay đổi thế giới

2. Trang cá nhân của TS Quốc

 

 

Aside

Với sức mạnh tính toán khổng lồ, máy móc giờ đây có thể nhận diện vật thể và thông dịch trong thời gian thực. Trí tuệ nhân tạo cuối cùng cũng đã thực sự thông minh.

Khi Ray Kurzweil gặp gỡ với CEO của Google là Larry page vào tháng 7 năm ngoái, ông không hề có ý định đi xin việc lúc đó. Nhà phát minh đáng kính này và cũng là một người có thể nhìn thấy trước được trí tuệ của máy móc, chỉ đơn thuần muốn thảo luận về cuốn sách sắp ra của ông ấy “Làm thế nào để có thể tạo nên một trí tuệ”. Ông nói với Page, người mà ông đã gửi bản thảo nháp từ những ngày đầu khi ông vừa hoàn thành cuốn sách, rằng ông muốn khởi tạo một công ty phát triển các ý tưởng của ông ấy về cách xây dựng một máy tính thông minh thực sự, một chiếc máy có thể hiểu ngôn ngữ và rồi tự nó có thể đưa ra các suy luận và quyết định.

Nhanh chóng, Page nhận thấy rằng muốn nổ lực này thành công thì cần phải có ít nhất lượng dữ liệu khổng lồ của Google cũng như một sức mạnh tính toán khổng lồ. “Tôi có thể cho ông truy cập vào một vài nguồn tài nguyên này,” Page nói với Kurzweil. “Nhưng một công ty tư nhân độc lập thì tôi khó mà giúp được gì nhiều.” Thế là Page gợi ý luôn với Kurzweil, một người chưa bao giờ làm thuê cho ai, về việc tham gia Google thay vì thành lập một công ty mới. Chẳng mất bao lâu, Kurzweil đã có được quyết định cho mình: vào tháng 1 năm nay, ông bắt đầu làm việc cho Google với cương vị giám đốc kỹ thuật. “Đây thực sự là một thời khắc quyết định đối với 50 năm toàn tâm toàn ý cho trí tuệ nhân tạo của tôi,” ông chia sẻ.

Kurzweil không chỉ bị hấp dẫn bởi nguồn tài nguyên tính toán khổng lồ của Google mà còn bởi sự tiến triển kinh ngạc của công ty này trong lĩnh vực trí tuệ nhân tạo có tên gọi là Học Sâu (deep learning) Công nghệ Học Sâu này cố gắng bắt trước các hoạt động não bộ ở trên lớp nơ-ron thần kinh ở phần neocortex, phần nhăn nheo chiếm tới 80% bộ não nơi mà các hoạt động tư duy xảy ra. Phần mềm này học theo một cách thực sự, nhận diện các mẫu dưới dạng số hóa của các âm thanh, hình ảnh, và các loại dữ liệu khác.

Ý tưởng cơ bản này đó là tạo ra một phần mềm có thể mô phỏng chuỗi lớn các nơ-ron ở neocortex trong một mạng nơ-ron nhân tạo. Đã có từ hàng thập kỷ nay và nó đã dẫn tới nhiều sự thất vọng cũng như những đột phá. Nhưng do sự tiến bộ trong các công thức toán học và sự hiện diện của những chiếc máy tính toán cực mạnh, các nhà khoa học máy tính giờ đây đã có thể mô hình hóa các lớp nơ-ron nhiều hơn rất nhiều so với trước đây.

Với những đột phá này, các nhà khoa học máy tính đang tạo nên những bước tiến vượt bậc trong việc nhận dạng giọng nói và hình ảnh. Tháng 6 vừa qua, một hệ thống học sâu của Google đã được cho xem 10 triệu bức ảnh từ các video trên Youtube và nó đã chứng minh được khẳ năng nhận dạng tốt gấp hai lần so với bất cứ một cộng nghệ nhận dạng nào trước đó đối với những vật thể có độ phức tạp như mèo chẳng hạn. Google cũng dùng công nghệ này để giảm tỉ lệ lỗi trong nhận dạng giọng nói trong một phần mềm di động Android gần đây nhất của nó. Vào tháng 10, trưởng phòng nghiên cứu của Microsoft Rick Rashid đã làm ngỡ ngàng những người có mặt trong một buổi thuyết giảng ở Trung Quốc bằng việc sử dụng một phần mềm nhận dạng giọng nói chuyển những tiếng ông nói ra thành phiên bản tiếng Anh với tỉ lệ lỗi là 7%, và rồi lại dịch chúng sang tiếng Trung Quốc ở dạng text và cuối cùng mô phỏng giọng nói của ông, cho khán giả nghe thấy là ông đang nói bằng tiếng Manderin của chính phiên bản tiếng Anh ban đầu. Cũng trong tháng đó, một nhóm gồm 3 sinh viên cao học và hai giáo sư đã giành chiến thắng trong một cuộc thi do Merck tổ chức nhằm nhận diện các phân tử mà có thể dẫn tới những loại thuốc mới.

Riêng Google nay đã trở thành một thỏi nam châm hút các tài năng về lĩnh vực học sâu và trí thông minh nhân tạo. Vào tháng 3, Google đã mua một startup đồng sáng lập bởi Geoffrey Hinton, giáo sư khoa học máy tính của trường Đại học Toronto, ông cũng là một thành viên của đội chiến thắng trong cuộc thi do Merck tổ chức. Hinton đã chia thời gian của ông ra thành hai -cho Đại học và cho Google. Ông cho biết ông có ý định đưa những ý tưởng của mình thành hiện thực để giải quyết những vấn đề có trong thực tế, ví dụ như nhận diện hình ảnh, tìm kiếm và hiểu được ngôn ngữ tự nhiên.

Tất cả những bước tiến này đã làm cho cả những nhà nghiên cứu trí thông minh nhân tạo thông thường khá thận trọng cũng hi vọng vào một thế hệ máy móc thông minh có thể trở nên hiện thực chứ không chỉ tồn tại ở trong những trang giấy văn học giả tưởng. Thực vậy, trí tuệ máy móc đã bắt đầu biến đổi mọi thứ-từ thông tin liên lạc và điện toán cho tới y học, sản xuất và giao thông. Các khả năng này đã được minh chứng một cách rõ rệt trong một chương trình đặc biệt được IBM với việc sử dụng máy tính Watson mang ra thi đấu cùng hai người chơi thực ở trong trò chơi truyền hình nổi tiếng Jeopardy-chiếc máy tính này sử dụng một số kỹ thuật học sâu và hiện nay đang được rèn luyện để giúp bác sĩ đưa ra các quyết định tốt hơn. Microsoft đã áp dụng phương pháp học sâu này trong hệ điều hành Windows Phone và cả tính năng tìm kiếm giọng nói cho Bing.

Muốn áp dụng công nghệ học sâu này vào các ứng dụng xa hơn nhận diện giọng nói và hình ảnh sẽ đòi hỏi phải có những đột phá về lý thuyết cũng như phần mềm, chưa tính đến việc sức mạnh xử lý cũng phải tăng lên đáng kể. Và có thể chúng ta sẽ không có được những cỗ máy có khả năng suy nghĩ cho bản thân chúng trong hàng năm trời nữa, có khi hàng thập kỷ nữa nếu không muốn nói là chẳng bao giờ. Nhưng ở thời điểm hiện tại, Peter Lee-giám đốc của trung tâm nghiên cứu của Microsoft USA, cho biết, “học sâu đã khơi ngòi cho một vài thử thách to lớn trong trí tuệ nhân tạo.”

Xây dựng một bộ não-Building a Brain

Đã có nhiều hướng tiếp cận nhằm xử lý các thử thách trên cạnh tranh với nhau. Một trong số chúng là đưa vào máy tính những thông tin và quy tắc về thế giới, điều này yêu cầu các lập trình viên phải vất vả viết các phần mềm tương tự với những đặc tính của cạnh của âm thanh. Việc này tiêu tốn rất nhiều thời gian và hệ thống vẫn xử lý một cách không ổn định đối với những dữ liệu không rõ ràng; chúng bị giới hạn vào những ứng dụng hẹp, bị điều khiển ví dụ như hệ thống menu điện thoại hỏi bạn đưa ra những yêu cầu bằng việc nói những từ cụ thể.

Mạng nơ-ron-được phát triển vào những năm 1950, không lâu sau sự ra đời của ngành nghiên cứu trí tuệ nhân tạo, có vẻ khá hứa hẹn bởi vì nó cố gắng mô phỏng cách bộ não làm việc, mặc dù bị đơn giản hóa đi rất nhiều. Một chương trình phần mềm mô hình hóa một bộ các nơ-ron và gán cho mỗi kết nối giữa các nơ-ron mộ trọng số. Các trọng số này quyết định cách mỗi nơ-ron được mô phỏng sẽ phản ứng như thế nào-0 hoặc 1- với một thuộc tính được số hóa như một cái cạnh hoặc cái hình màu xanh trong một bức hình, hoặc là một mức độ năng lượng nhất định tại một tần số trong một âm vị (phoneme), đơn vị ngữ âm tối thiểu trong hệ thống tiếng nói của một ngôn ngữ.

Một vài trong số các hệ thống nơ-ron nhân tạo có thể có thể tự luyện để nhận biết các mẫu phức tạp.

Các lập trình viên thường sẽ huấn luyện mạng nơ-ron phát hiện các đối tượng (object) hay các âm vị (phoneme) bằng cách oanh tạc mạng nơ-ron với các phiên bản số hóa của các bức ảnh có chứa hình ảnh của vật thể hay các sóng âm có chứa âm vị cần nhận diện. Nếu mạng không thể nhận diện chính xác mẫu được yêu cầu, một thuật toán sẽ thay đổi các trọng số. Mục đích cuối cùng của việc huấn luyện này đó là làm cho mạng nơ-ron có thể nhận diện một cách ổn định các mẫu trong một chuỗi các hình ảnh hoặc âm thanh mà con người biết, ví dụ như âm vị “d” hoặc là hình ảnh của một chú chó. Điều này rất giống với cách một đưa trẻ học cách nhận diện chú cho bằng việc để ý những chi tiết ở đầu, cử chỉ, và những đặc điểm khác mà một con vật có long và biết sủa được mọi người gọi là chó có.

Nhưng các mạng nơ-ron đời đầu chỉ có thể mô phỏng rất giới hạn số lượng nơ-ron tại một thời điêm, do đó chúng không thể nhận diện được các mẫu có độ phức tạp cao. Họ đã vật vờ suốt thập niên 70.

AI_revolution

 

Vào giữa thập niên 80, Hinton và những người khác đã giúp khuấy động lại mối quan tâm tới mạng nơ-ron với những mô hình có tên là “sâu” mà có thể xây dựng tốt hơn các lớp mạng nơ-ron. Nhưng công nghệ vẫn cần sự tham gia rất lớn của con người: các lập trình viên cần phải gán nhãn cho dữ liệu trước khi tải vào trong mạng. Và việc nhận dạng ảnh và âm thanh phức tạp đòi hỏi một sức mạnh tính toán cao hơn khả năng lúc bấy giờ.

Tuy nhiên, cuối cùng thì trong thập niên vừa rồi, Hinton và những nhà nghiên cứu khác đã đạt được một số đột phá nền tảng mang tính lý thuyết. Trong năm 2006, Hinton đã phát triển một cách huấn luyện các lớp mạng nơ-ron hiệu quả hơn. Lớp đầu tiên chỉ học nhưng đặc tính rất cơ bản như cạnh của một tấm ảnh hoặc là nhưng đơn vị âm nhỏ nhất trong âm thanh. Nó có thể làm được điều này là nhờ tìm kiếm những sự kết hợp các điểm ảnh số hoặc sóng âm số có tần suất lặp đi lặp lại nhiều hơn so với việc ngẫu nhiên. Một khi lớp đầu tiên này nhận diện chính xác các đặc tính trên, họ tiếp tục sang lớp tiếp theo với việc nhận diện những đặc tính phức tạp hơn như góc hoặc là kết hợp của các đơn vị âm nhỏ nhất. Quá trình này được lặp đi lặp lại trong các lớp kế tiếp cho tới khi hệ thống có thể nhận diện các âm vị hoặc vật thể với độ tin cậy cao.

Vào tháng 6 vừa rồi, Google đã trình diễn một trong số những mạng nơ-ron lớn nhất với hơn một tỉ kết nối. Một đội dưới sự dẫn dắt của giáo sư khoa học máy tính Adrew Ng của Stanford và một thành viên của Google Jeff Dean đã trình chiếu những ảnh hệ thống từ 10 triệu video tải từ youtube một cách ngẫu nhiên. Một mạng nơ-ron trong mô hình được giao nhiệm vụ nhận diện các ảnh mèo. Những mạng khác tập trung vào mặt người, hoa vàng và những vật thể khác. Nhờ sức mạnh của học sâu, hệ thống đã nhận diện được các vật thể dù không có một ai phải định nghĩa hay gán nhãn cho chúng.

Tuy nhiên, điều làm các chuyên gia trí tuệ nhân tạo ngạc nhiên đó là sự vượt trội trong khả năng nhận diện hình ảnh. Hệ thống này đã phân loại các vật thể và chủ để trong ảnh từ youtube với độ chính xác 16%. Điều này nghe có vẻ không có gì là ấn tượng, nhưng nó đã tốt hơn tới 70% so với các phương pháp trước đây. Và ông Dean lưu ý rằng có tới tận 22 nghìn tựa mục để chọn; phân loại các vật thể một cách chính xác  như việc phân biệt được hai loại cá đuối giống nhau. Điều này là không hề dễ dàng đối với không ít người. Khi hệ thống được yêu cầu sắp xếp các hình ảnh thành 1000 nhóm chung chung hơn, độ chính xác đã nhảy lên tới 50%.

Biển dữ liệu-Big Data

Việc huấn luyện nhiều lớp của mạng nơ-ron ảo trong thí nghiệm trên cần tới 16 nghìn bộ vi xử lý máy tính-tương đương với loại máy mà Google phát triển cho hệ thống hạ tầng tính toán của nó trong việc tìm kiếm và các dịch vụ khác.

Ít nhất 80% các phát triển gần đây trong lĩnh vực trí tuệ nhân tạo là nhờ vào sự phát triển trong khả năng tính toán, Dillep Gorege-đồng sáng lập công ty machine-learning Vicarious, cho hay.

Tuy nhiên, không chỉ nhờ có trung tâm dữ liệu khổng lồ của Google. Học sâu phát triển được còn nhờ vào phương pháp của công ty này trong việc chia nhỏ công việc giữa nhiều máy tính và nhờ đó chúng hoàn thành nhiệm vụ nhanh hơn. Đây là công nghệ mà Dean đã giúp phát triển lúc đầu khi ông mới vào làm cho Google. Nó cũng đã tăng tốc độ đáng kể trong việc huấn luyện mạng nơ-ron học sâu, cho phép Google chạy các mạng lớn hơn và tải nhiều dữ liệu vào chúng hơn.

Học sâu đã cải thiện việc tìm kiếm âm thanh trên điện thoại thông minh. Cho tới tận năm ngoái, các phần mềm Android của Google sử dụng một phương pháp với sự nhầm lẫn từ khá cao. Nhưng trong thời gian chuẩn bị cho việc ra mắt phiên bản Android mới vào tháng 7 vừa rồi, Dean và đội của ông đã giúp thay thế một vài phần của hệ thống với những công nghệ mới được dựa trên học sâu. Bời vì các lớp nơ-ron cho phép việc nhân diện chính xác hơn các mẫu âm, hệ thống có thể nhận diện được các mảnh âm chính xác hơn, đặc biệt là trong các môi trường nhiều nhiễu và ồn như đường tàu điện ngầm chẳng hạn. Gần như ngay lập tức, số lượng lỗi đã giảm xuống 25%. Kết quả rất tốt này làm cho nhiều người giờ đây xem công cụ tìm kiếm âm thanh của Android thông minh hơn công cụ tương đương Siri nổi tiếng của Apple.

Với tất cả những tiến bộ này, không phải ai cũng nghĩ học sâu có thể đưa trí tuệ nhân tạo lên một tầng ngang với trí tuệ con người. Một vài nhà phê bình cho rằng học sâu và trí tuệ nhân tạo nhìn chung còn bỏ qua rất nhiều thuộc tính y học của bộ não và chỉ tập chung vào năng lực tính toán.

Một trong những nhà phê bình như thế đó là Jeff Hawkins, sáng lập ra Palm Computing, người đã đầu tư vào Numenta với việc phát triển hệ thống học máy không sử dụng học sâu mà đi theo hướng sinh học. Hệ thống của Numenta có thể giúp dự đoán các mẫu tiêu thụ năng lượng và khả năng mà những công nghệ như cối xay gió sẽ thất bại như thế nào. Ông cũng là tác giả của On Intelligence, một cuốn sách được xuất bản năm 2004 về cách bộ não hoạt động và như là một hướng dẫn để xây dựng những cỗ máy thông minh. Ông cho hay học sâu sẽ thất bại bởi khái niệm thời gian. Ông cho biết, bộ não xử lý các dòng dữ liệu cảm nhận, và việc học của chúng ta phụ thuộc vào khả năng gợi lại những chuỗi mẫu: ví dụ khi bạn xem một video hoặc một con mèo làm gì đó hài hước, chính các hành động mới là cái quan trọng, không phải là một chuỗi các bức ảnh tĩnh như các Google sử dụng trong thí nghiệm của họ. “Google luôn cho rằng nhiều dữ liệu có thể tạo nên mọi thứ,” ông Hawkins cho hay thêm. Nhưng nếu nó không thể tạo nên tất cả, các nguồn tài nguyên tính toán mà các công ty như Google sử dụng để giải quyết các vấn đề không thể bị bỏ qua. Chúng rất quan trọng, bởi hiện tại bộ não thực sự phức tạp hơn nhiều so với bất cứ một mạng nơ-ron ảo nào chúng ta có. “Bạn cần nhiều và nhiều tài nguyên tính toán hơn nữa để có thể biến ý tưởng thành hiện thực,” Hinton cho hay.

Tiếp theo sẽ là gì-What’s Next

Mặc dù Google vẫn còn lâu mới đưa ra những ứng dụng cho tương lại, nhưng viễn cảnh đầy hứa hẹn. Rõ rang, tìm kiếm hình ảnh tốt hơn có thể giúp cho Youtube. Ông Dean cho biết các mô hình học sâu có thể dùng các dữ liệu âm vị tiếng Anh để huấn luyện các hệ thống nhận biết âm nói trong các ngôn ngữ khác nhanh hơn. Và tương tự khả năng nhận diện hình ảnh phức tạp sẽ giúp những chiếc xe tự lại của Google tốt hơn nhiều. Và còn có tìm kiếm và quảng cáo sẵn sàng bảo hộ nó. Cả hai đều có thể nhìn thấy những cải tiến từ bất cứ một công nghệ nào tốt hơn và nhanh hơn trong việc nhận diện những thứ con người đang tìm kiếm-có khi còn trước cả khi họ nhận ra.

Sergy Brin đã cho biết anh muốn xây dựng một phiên bản HAL thân thiện trong “2001: A Space Odyssey.

Đây chính là điều thôi thúc chuyên gia 65 tuổi Kurrzweil, với một hiểu biết sâu rộng về trí tuệ máy tính. Khi còn là học sinh cấp ba, ông đã viết phần mềm cho phép máy tính có thể tạo ra âm nhạc với những phong cách cổ điển phong phú, và ông đã trình diễn nó trong một lần lên truyền hình vào năm 1965 trong một chương trình “I’ve Got a Secret.” Kể từ đó các phát minh của ông gồm có máy và phần mềm chuyển file đọc thành tiếng với khả năng quét file chữ và số hóa ở mọi dạng phông chữ, và những phần mềm tổng hợp âm nhạc với khả năng tái tạo các âm thanh của các nhạc cụ giao hưởng, và cả hệ thống nhận diện giọng nói với lượng từ vựng khổng lồ

Hôm nay, ông đang xây dựng một “người bạn siêu máy tính” có khả năng lắng nghe bạn trong các cuộc hội đàm điện thoại, đọc tin nhắn của bạn và nắm rõ đường đi nước bước của bạn-tất nhiên là với sự cho phép của bạn-và nhờ đó nó có thể cho bạn biết những thứ bạn muốn ngay cả trước khi bạn yêu cầu. Đây không phải là mục tiêu tức khắc của ông tại Google, nhưng nó phù hợp với điều mà đồng sáng lập Google Sergey Brin muốn. Brin muốn xây dựng một cỗ máy tương tự như trong phim “2001: A Space Oddyssey” nhưng chỉ khác một điều đó là nó không giết người.

Hiện tại, Kurweil muốn giúp máy tính có thể hiểu và thậm chí nói được tiếng người. “Nhiệm vụ của tôi là đưa cho máy tính đủ hiểu biết về ngôn ngữ tự nhiên để có thể làm được những điều hữu ích ví dụ như tìm kiếm tốt hơn, trả lời các câu hỏi tốt hơn,” ông cho biết. Về cơ bản, ông hi vọng tạo nên một phiên bản máy tinh Watson của IBM nhưng linh hoạt hơn. Ông rất than phục chiếc máy tính này vì nó có khả năng hiểu các câu hỏi trong trò chơi Jeopardy ví dụ như khi được hỏi là ““What is a meringue harangue?” thì nó trả lời khá sắc xảo: “a long, tiresome speech delivered by a frothy pie topping.”

Kurzweil không tập trung duy nhất vào học sâu, mặc dù ông cho biết hướng tiếp cận của ông đối với nhận diện giọng nói dựa trên các lý thuyết tương tự về cách bộ não hoạt động. Ông muốn mô hình hóa ý nghĩa thực sự của từ, cụm từ và câu, bao gồm cả sự đa nghĩa hay ẩn ý trong đó mà thường gây ra khó khăn đối với máy tính. “Tôi có một ý tưởng trong đầu về một cách mang tính đồ hình để có thể biểu diễn được ý nghĩa của ngôn ngữ,” ông cho biết.

Và điều này đòi hỏi một cách đồ hình hóa ngữ pháp của câu hoàn chỉnh hơn. Google hiện đã đang dùng một cách phân tích để cải thiện ngữ pháp trong ứng dụng dịch của nó. Việc hiểu biết ngôn ngữ tự nhiên cũng sẽ đòi hỏi máy tính phải nắm được điều con người nghĩ với một ý nghĩa theo lẽ thường. Vì điều này, Kurweil sẽ nhờ tới Knowledge Graph, một catalogue gồm 700 triệu chủ đề, địa điểm, con người và nhiều hơn nữa, cùng với hàng triệu mối quan hệ giữa chúng. Catalogue này đã được giới thiệu năm ngoái với mục đích cung cấp cho người tìm kiếm các câu trả lời cho họ, không chỉ là đưa ra các địa chỉ web liên quan.

Cuối cùng, Kurweil lên kế hoạch áp dụng các thuật toán học sâu để giúp máy tinh giải quyết với việc “đa nghĩa hay ẩn ý trong ngôn ngữ.” “Việc hiểu ngôn ngữ con người không phải là một mục tiêu sẽ được hoàn thành ở một thời điểm nào đó,” ông cho biết. “Đó không phải là một dự án mà tôi có thể hoàn thành được.”

Mặc dù tầm nhìn của Kurweil còn lâu mới trở thanh hiện thực, nhưng học sâu đang khuấy động các ứng dụng vượt ra khỏi cả nhận diện âm thanh và giọng nói. Ví dụ, có một sự phát hiện trong y học. Sự chiến thắng đầy ngạc nhiên của nhóm của Hinton trong cuộc thi Merck rõ rang cho thấy khả năng ứng dụng của học sâu trong lĩnh vực mà không mấy ai có thể tượng tượng được là nó có thể có sức ảnh hưởng.

Và không chỉ có vậy. Peter Lee của Microsoft cho hay hiện đã có những nghiên cứu sớm đầy tiềm năng về tính khả dụng của học sâu trong nhãn quang máy móc- các công nghệ sử dụng hình ảnh cho các ứng dụng như việc rà soát công trường hay dẫn đường rô bốt. Ông cũng cho biết các cảm biến cá nhân có thể giúp mạng nơ-ron dự đoán được các vấn đề sức khỏe. và một vài cảm biến ở các thành phố có thể tải dữ liệu cho các hệ thống học sâu nhằm dự đoán các vụ tắc đường có thể xảy ra.

Trong một lĩnh vực đầu tư rất sâu như việc mô hình hóa bộ não con người thì việc công nghệ không thể giải quyết hết mọi vấn đề là không thể tránh khỏi. Nhưng ở thời điểm hiện tại, học sâu đang dẫn đầu trong công nghệ trí tuệ nhân tạo. Dean cho biết: “Học sâu thực sự là một công cụ mạnh mẽ để học về thế giới.”

 

Người dịch: Lê Duy Nam

Nguồn:  http://bookhunterclub.com/hoc-chieu-sau-google-va-ray-kurweil-dang-dua-tri-tue-nhan-tao-len-tam-tam-cao-moi/

Aside

MongoHQ

Database-as-a-service provider MongoHQ announced that it has partnered with Open Data Services leader GoGrid to deliver its fully-managed platform to host and scale MongoDB databases through GoGrid’s 1-Button Deploy™ solution. The partnership will enable developers to run multiple big data evaluations on demand, fast and with a minimum investment of time or resources, and make it simple for developers, systems administrators and IT pros to retain control of their data in the cloud.

Databases such as MongoDB, are vital in today’s business climate, and frequently require expertise and resources that place its benefits beyond the reach of many companies,” said Heather McKelvey, CTO and SVP Engineering at GoGrid. “Partnering with MongoHQ will offer developers an incredibly simple and cost-effective way to deploy MongoDB at the click of a button, while avoiding the pitfalls that come with a new database deployment.”

Load balanced performance and network redundancy

MongoHQ’s elastic deployments on GoGrid deliver f5 hardware load balancing for application servers, cross-network redundancy and SSD performance through an easy-to-use user interface. This will offer organizations the ability to leverage the advantages of MongoHQ’s managed, scalable MongoDB DBaaS, while meeting the demands of systems that require balanced performance and high availability. Additionally, it will offer the ability to take applications to production simply and securely with elastic pricing, which offers the most cost-effective way to deploy MongoDB databases.

MongoHQ makes best-practice MongoDB available instantly in the same data center as your application, built to scale with consistent performance for any requirement, with a real-time monitoring dashboard, multi-redundant infrastructure, and a console-like experience on the web. The partnership with GoGrid offers a new level of reassurance to developers, delivering elastic deployments of MongoDB through an experienced provider that is trusted by more than 15,000 companies to run their infrastructure and databases and called “Cloud’s Big Data Specialist” by InformationWeek.

At MongoHQ we want to give developers flexibility to use our DBaaS platform wherever they want. Top companies as well as start-ups are building their applications on GoGrid so it makes sense to include them as a new provider. We’re really happy to have them onboard as a partner supporting our Elastic Deployments” said Kurt Mackey, CEO, MongoHQ.

Delivering flexible, cloud-based data infrastructure quickly and cost-effectively

GoGrid — which dramatically simplifies the process of moving Big Data applications from trial to full-scale production and reduces it from weeks to mere minutes — automatically orchestrates deployment of a multi-server Big Data cluster across virtual servers. This approach saves money, supplies a purpose-built infrastructure, automates deployment of best-of-breed Big Data technologies, and simplifies evaluation and proof of concept (POC).

Unlike platforms that require you to anticipate how much space you’ll require, MongoHQ asks users to pay only for the data they actually use. Starting at $18/GB per month, MongoHQ’s Elastic Deployments:

●        Scale automatically, growing as your data grows

●        Provide automatic daily backups

●        Are automatically equipped with the most recently updated MongoDB features

●        Let you choose where you host your data

●        Let you pay only for the data you use

Aside

1. Tổng quan về Hive

Apache Hive là 1 kho dữ liệu (data warehouse) hỗ trợ người sử dụng có thể dễ dàng hơn trong việc quản lý và truy vấn đối với các tập dữ liệu lớn được lưu trữ trên các hệ thống lưu trữ phân tán (distributed storage). Hive được xây dựng dựa trên cơ sở của Apache Hadoop, nó cung cấp các tính năng chinh sau:

  • Công cụ cho phép dễ dàng thực hiện tác vụ như trích xuất, vận chuyển và lưu trữ dữ liệu.
  • Cơ chế để xử lý cho nhiều định dạng dữ liệu khác nhau.
  • Truy cập tới dữ liệu dạng files được lưu trữ trực tiếp ở trong Apache HDFS hoặc đối với nhiều hệ thống lưu trữ dữ liệu khác như Apache HBase.
  • Thực hiện query thông qua MapReduce.

Hive định nghĩa ra một ngôn ngữ truy vấn đơn giản có cú pháp gần giống với SQL  (SQL-like query language) được gọi là HiveQL, nó cho phép người sử dụng đã quen thuộc với các truy vấn SQL thực hiện việc truy vấn dữ liệu. Ngoài ra ngôn ngữ này còn cho phép các lập trình viên người đã quen thuộc với MapReduce framework có thể nhúng các mappers và reducers cho chính họ viết ra để thực thi nhiều hơn nữa các phân tích phức tập mà không được hỗ trợ bởi các hàm đã có sẵn trong ngôn ngữ HiveQL. HiveQL cung có thể được mở rộng với các custom scalar functions (UDF’s), aggregations (UDAF’s) và các table funtions (UDTF’s)

Hive không yêu cầu dữ liệu phải được đọc và ghi dưới một định dạng của riêng Hive (Hive format). Hive hoạt động tốt trên Thrift và các định dạng dữ liệu riêng của người sử dụng.

Hive không được thiết kế để cho các giao dịch online (OLTP workloads) và không nên dùng cho các real-time queries và các cập nhật trên từng dòng trong 1 table (row-level). Hive hoạt động tốt nhất cho các batch jobs trên các tập dữ liệu lớn, mà ở đó dữ liệu được thêm vào liên tục (append-only data) ví dụ như web logs.  Hive có khả năng mở rộng theo chiều ngang tốt (thực thi tốt trên 1 hadoop cluster có số tượng máy biến đổi), có khả năng tích hợp với MapReduce framework và UDF, UDAF, UDTF; có khả năng chống chịu lỗi và mềm dẻo đối với các dữ liệu đầu vào của chính nó.

Các thành phần cấu hình Hive bao gồm HCatalog và WebHCat. HCatalog là một thành phần của Hive. Đây là lớp quản lý lưu trữ  cho Hadoop (table and management layer), nó cho phép người dùng với các công cụ xử lý dữ liệu khác nhau bao gồm cả Pig và MapReduce thực thi hoạt động đọc, ghi một cách dễ dàng hơn. WebHCat cung cấp một dịch vụ cho phép bạn có thể thực thi Hadoop MapReduce (hoặc YARN), Pig, Hive.

 

 2.Kiến trúc của Hive

Hive có các thành phần chính là :

  • Hive UI: cung cấp giao diện cho phép người sử dụng tương tác với hệ thống Hive. Hive cung cấp nhiều phương thức khác nhau cho phép người sử dụng tương tác với Hive:
    • CLI: giao diện dạng shell cho phép người sử dụng tương tác trực tiếp qua command line.
    • Hive Web Interface: giao diện Web cho phép người sử dụng thực hiện các truy vấn thông qua giao diện Web.
    • Hive Thrift Server: cho phép các client từ nhiều ngôn ngữ lập trình khác nhau có thể thực hiện tương tác với Hive.
  • Hive Driver: thành phần nhận các truy vấn và chuyển các truy vấn này thành các MapReduce Jobs để tiến hành xử lý yêu cầu của người sử dụng.
    • Driver: nhận các truy vấn, thành phần này thực hiện việc quản lý các sessions và cung cấp các API để thực thi và lấy dữ liệu trên  JDBC/ODBC interfaces.
    • Compiler: thành phần hiện việc phân tích ngữ nghĩa đối với các query, lấy các thông tin metadata cần thiết về table và partion từ metastore để sinh ra các excution plan.
    • Execute engine: thành phần thực thi các execution plan được tạo bởi compiler (submit các job tới MapReduce). Ngoài ra thành phần execution enginen này thực hiện việc quản lý các dependencies của các bước trong mỗi execution plan, thực thi từng bước này.
  • Hive Metastore: thành phần lưu trữ các metadata của Hive: table, partion, buckets bao gồm cả thông tin về các column trong mỗi table, các serializers và desrializers cần thiết để thực hiện việc đọc và ghi dữ liệu. Metastore sử dụng một cơ sở dữ liệu quan hệ để lưu trữ dữ liệu của chính mình.

  1

Hình 2.1. Kiến trúc của Hive

 3. Hoạt động của Hive

 

2

Hình 3.1. Mô hình hoạt động của Hive

 

Quy trình hoạt động của Hive có thể được mô tả theo các bước sau:

  1. Các truy vấn tới từ User Interface (CLI, Hive Web Interface, Thirft Server) được gửi tới thành phần Driver (Bước 1 hình 3.1)
  2. Driver tạo ra mới 1 session cho truy vấn này và gửi query tới compiler để nhận lấy Execution Plan (Bước 2 hình 3.1)
  3. Compilter nhận các metadata cần thiết từ Metastore (Bước 3, 4 hình 3.1). Các metadata này sẽ được sử dụng để kiểm tra các biểu thức bên trong query mà Compiler nhận được.
  4. Plan được sinh ra bởi Compiler  (thông tin về các job (map-reduce) cần thiết để thực thi query sẽ được gửi lại tới thành phần thực thi  (Bước 5hình 3.1)
  5. Execution engine nhận yêu cầu thực thi và lấy các metadata cần thiết và yêu cầu mapreduce thực thi công việc (Bước 6.1, 6.2, 6.3 hình 3.1)
  6. Khi output được sinh ra, nó sẽ được ghi dưới dạng 1 temporary file, temorary file này sẽ cung cấp các thông tin cần thiết cho các stages khác của plan. Nội dung của các temporary file này đưc execution đọc trực tiếp từ HDFS như là 1 phần của các lời gọi từ Driver (bước 7, 8, 9 hình 3.1)

 

4. Mô hình dữ liệu trong Hive

3

Hình 4.1. Hive Data Model

 

Dữ liệu trong Hive được tổ chức thành các kiểu sau:

  • Databases: là namespace cho các tables, dùng để nhóm và quản lý các nhóm tables khác nhau.
  • Tables: tương tự như table trong các hệ cơ sở dữ liệu quan hệ. Trong Hive table có thể thực hiện các phép toán filter, join và union… Mặc định thì dữ liệu của Hive sẽ được lưu bên trong thư mục warehouse trên HDFS. Tuy nhiên Hive cũng cung cấp kiểu external table cho phép ta tạo ra và quản lý các table mà dữ liệu của nó đã tồn tại từ trước khi ta tạo ra table này hoặc nó được lưu trữ ở  1 thư mục khác bên trong hệ thống HDFS. Tổ chức row và column bên trong Hive có nhiều điểm tương đồng với tổ chức Row và Column trong các hệ cơ sở dữ liệu quan hệ. Hive có 2 kiểu table đó là: Managed Table và External tables.
  • Partions: Mỗi table có thể có 1 hoặc nhiều các khóa mà từ đó xác định dữ liệu sẽ được lưu trữ ở đâu. Ví dụ table web_log có thể phân chia dữ liệu của mình theo từng ngày là lưu dữ liệu của mỗi ngày trong 1 thư mục khác nhau bên dưới đường dẫn  warehouse. Ví dụ: /warehouse/web_log/date=”01-01-2014″
  • Buckets: Dữ liệu trong mỗi partion có thể được phân chia thành nhiều buckets khác nhau dựa trên 1 hash của 1 colume bên trong table. Mỗi bucket  lưu trữ dữ liệu của nó bên dưới 1 thư mục riêng. Việc phân chia các partion thành các bucket giúp việc thực thi các query dễ dàng hơn.

 

4.1. Managed Tables and External Tables

Managed Tables:

Khi bạn tạo mới 1 tables thì Hive  sẽ chuyển các dữ liệu này tới tới kho dữ liệu của nó (warehouse directory). Tuy nhiên bạn vẫn có thể tạo ra các external table, với khai báo thì nàythì Hive biết rằng dữ liệu dữ liệu này đã tồn tại ở trên 1 location khác bên ngoài warehouse directory.

Sự khác biệt của chúng sẽ xảy ra ở 2 quá trình LOAD và DROP. Ta bắt đầu với việc tìm hiểu managed table trước tiên:

Khi bạn thực hiện việc load dữ liệu vào bên trong managed table, nó sẽ thực hiện việc chuyển dữ liệu tới bên trong warehouse directory. Ví dụ:

 

CREATE TABLE managed_table(dummy STRING);
LOAD DATA INPATH '/user/hadoop/data.txt' INTO table managed_table;

 

Với khai báo này thì Hive sẽ thực hiện việc di chuyển file hdfs://user/tom/data.txt tới  Hive’s warehouse cho managed_table được lưu trữ tại đường dẫn:hdfs://user/hive/warehouse/managed_table.

Nếu table bị xóa đi với câu lệnh :

DROP TABLE managed_table; 

thì table bao gồm cả metadata và dữ liệu chứa bên trong table đó sẽ bị xóa đi, trong trường hợp này câu lện DROP sẽ thực hiện việc xóa dữ liệu và dữ liệu bên trong table trên sẽ không còn tồn tại nữa.

External tables:

External tables lại có cách đối xử khác biệt. Bạn sẽ quản lý việc tạo mới và xóa đi đối với dữ liệu. Địa chỉ của external data sẽ được khai báo khi tạo mới bảng:

CREATE EXTERNAL TABLE external_table (dummy STRING)
LOCATION '/user/hadoop/external_table';
LOAD DATA INPATH '/user/hadoop/data.txt' INTO TABLE external_table;

Với từ khóa EXTERNAL, Hive hiểu rằng nó không trực tiếp quản lý các dữ liệu này bởi vậy nó sẽ không thực hiện việc di chuyển chúng tới Hive’s data warehouse. Trên thực tế là Hive không thực hiện việc kiểm tra xem dữ liệu trên External localtion có tồn tại hay không. Đây là 1 tiện ích khác hữu dụng, nó cho phép ta có thể thực hiện việc khởi tạo dữ liệu khi  tạo 1 table trên  Hive. Và khi dữ liệu việc drop 1 external table thì Hive chỉ thực hiện việc xóa đi các metadata của nó.

4.2. Partions and Buckets

Hive tổ chứng dữ liệu của nó thành các partions, là 1 cách để phân chia dữ liệu thành các khối khác nhau dựa trên giá trị của  partion columns ví dụ như date. Sử dụng partions có thể khiến cho quá trình query trở nên nhan hơn/

Table hoặc partions cũng có thể tiếp tục phân chia thành các buckes, để giúp dữ liệu được tổ chức để sử dụng cho nhiều efficient query. Ví dụ, bucketing bởi userID có nghĩa là chúng ta cho thể thực hiện việc tính toán nhanh hơn trên mỗi query của người sử dụng thay vì thực hiện nó trên 1 tập dữ liệu được sắp xếp 1 cách ngẫu nhiên.

 

Partions:

Một table trong Hive có thể được partioned theo nhiều chiều khác nhau. Ví dụ như logs file có thể được partions bởi ngày nó được tạo ra và country  để cho phép thực hiện các query theo location 1 cách dễ dàng hơn.

CREATE TABLE logs (ts BIGINT, line STRING)
PARTITIONED BY (dt STRING, country STRING);
 

Khi ta chuyển dữ liệu tới một partion talbe, thông tin về partion phải được xác định:

LOAD DATA LOCAL INPATH 'input/hive/partions/file1'
INTO TABLE logs
PARTITION (dt='2001-01-01', country='GB');

Đối với mức filesystem thì các partion đơn giản là được lưu trữ lồng bên trong nhau trong thư mục lưu trữ dữ liệu cả table đó.

/user/hive/warehouse/logs/dt=2010-01-01/country=GB/file1
                                                  /file2
                                       /country=US/file3
                         /dt=2010-01-02/country=GB/file4
                                       /country=US/file5
                                                  /file6

 

Table logs có 2 partions được chia theo trường date, 2010-01-01 và 2010-01-02, chúng được lưu trữ tương ứng trong các đường dẫn có tên dt=2010-01-01 và dt=2010-01-02 và 2 subpartions GB và US được lưu trữ bên trong các date partions, chúng có tên: country=GB và country=US:

Chúng ta có thể kiểm tra các partions trong Hive bằng câu lệnh:

hive> SHOW PARTITIONS logs;
dt=2001-01-01/country=GB
dt=2001-01-01/country=US
dt=2001-01-02/country=GB
dt=2001-01-02/country=US

Buckets

Có 2 lý do tại sao bạn nên tổ chức dữ liệu bên trong table (partions) thành các buckets. Điều đầu tiên là nó cho phép thực hiện các query 1 cách hiệu quả hơn. Bucketing tác động tới extra structure trên table. nó giúp Hive thực hiện các query 1 cách thuận lợi hơn. Ví dụ việc join giữa 2 table đã được bucked trên cùng 1 column –  đã thực hiện việc join columns – có thể hiệu quả tương tự như map-side join.

Partion vs bucket:

  • Partion thực hiện phân chia dữ liệu trong 1 table theo value của column key, mỗi partion key sẽ có 1 không gian lưu trữ của riêng nó.
  • Bucketing: thực hiện việc phân phối các key tới từng bucket khác nhau và mỗi partion lại chỉ có 1 key duy nhất.

 

4.3. Các kiểu dữ liệu trong Hive

Kiểu dữ liệu nguyên thủy:

Mỗi columns có 1 kiểu dữ liệu cố định. Các kiểu dữ liệu nguyên thủy sau sẽ được hỗ trợ đối với Hive:

  • Integers:
    • TINYINT – 1 byte integer
    • SMALLINT – 2 byte integer
    • INT – 4 byte integer
    • BIGINT – 8 byte integer
  • Boolean type
    • BOOLEAN – TRUE/FALSE
  • Floating point numbers
    • FLOAT – single precision
    • DOUBLE – Double precision
  • String type
    • STRING – sequence of characters in a specified character set

Các kiểu dữ liệu khác:

  • Structs: là kiểu dữ liệu mà mỗi phần tử bên trong đó có thể được truy cập thông qua việc sử dụng ký hiệu (.) . Ví dụ, với kiểu dữ liệu STRUCT {a INT; b INT} ví dụ trường a của nó có thể truy cập thông qua c.a
  • Maps (key-value tuples): là kiểu dữ liệu mà các phần tử sẽ được truy cập thông qua ký hiệu [‘element name’]. Đối với map M thực hiện việc map dữ liệu đối với khóa ‘group’ -> thì dữ liệu sẽ được sử dụng bởi trường M[‘group’]
  • Arrays (indexable lists): Kiểu mảng.

5.Metastore

The metastore là trung tâm lưu trữ của metadata của Hive. Metastore được thi thành 2 thành phần: a services và backing store dùng để lưu trữ dữ liệu. Mặc định thì metastore service chạy trong cùng 1 jvm với Hive services và bao gồm luôn cả 1 Derby database instances được lưu trữ trên local disk. Mô hình này được gọi là embedded metastore configuration.

Sử dụng embedded metastore  là cách đơn giản nhất để bắt đầu với Hive, mặc dù 1 embedded Derby database chỉ cho phép truy cập vào files ở trên disk 1 lần ở cùng 1 thời điểm, điều đó có nghĩa là bạn chỉ có thể có 1 session duy nhất có thể sử dụng dữ liệu trong metastore. Nếu ta thử khởi động session số 2 thì sẽ gặp được thông báo lỗi

 4

Hình 5.1. Hive Metastore

 

Giải pháp để hỗ trợ sử dụng nhiều session cùng 1 lúc là sử dụng standalone database. Cấu hình này còn được gọi tên là local mestastore, với nó thì metastore services vẫn tiếp tục chạy trong cùng 1 JVM với Hive services nhưng nó thực hiện kế t nối tới database thông qua 1 process khác, database này có thể nằm trên local machine hoặc trên remote machine. Bất kỳ JDBC-compliant database có thể được sử dụng bằng việc thiết lập thuộc tính javax.jdo.option.*.

MySQL là lựa chọn phổ biến cho việc lưu trữ standalone metastore. Trong trường hợp này javax.jdo.option.ConnectionURL sẽ được thiết lập là:jdbc:mysql://dbname?createDatabaseIfNotExist=true và javax.jdo.option.ConnectionDriverName được thiết lập thành com.mysql.jdbc.Driver.  JDBC driver jar file cho MySQL phải được xuất hiện trong Hive’c classpath.

Còn một kiểu mô hình nữa là remote-metastore, trong đó 1 hay nhiều metastore server được chạy trên các process riêng biệt. Nó mang tới  khả năng tốt hơn trong việc quản lý và đảm bảo tính an ninh.

 

5

 

Hình 5.2. Các cấu hình cho metastore

6. Một ví dụ về sử dụng Hive

Sau các phần trên, ta đã có cái nhìn khá tổng quát về Hive. Phần này sẽ thực hiện việc phân tích dữ liệu trong HDFS với Hive. Kịch bản sử dụng được đưa ra là ta sẽ sử dụng Hive để phân tích dữ liệu thu được từ các apache webserver được lưu trữ trên HDFS. Các file log này sẽ được thu thập từ các webserver bên trong hệ thống, và từ đó ta có thể thực hiện việc thống kê quá trình sử dụng trong hệ thống. Nội dung của 1 file Log sẽ có định dạng như sau:

64.242.88.10 - - [07/Mar/2004:16:05:49 -0800] "GET /twiki/bin/edit/Main/Double_bounce_sender?topicparent=Main.ConfigurationVariables HTTP/1.1" 401 12846
64.242.88.10 - - [07/Mar/2004:16:06:51 -0800] "GET /twiki/bin/rdiff/TWiki/NewUserTemplate?rev1=1.3&rev2=1.2 HTTP/1.1" 200 4523
64.242.88.10 - - [07/Mar/2004:16:10:02 -0800] "GET /mailman/listinfo/hsdivision HTTP/1.1" 200 6291
64.242.88.10 - - [07/Mar/2004:16:11:58 -0800] "GET /twiki/bin/view/TWiki/WikiSyntax HTTP/1.1" 200 7352
64.242.88.10 - - [07/Mar/2004:16:20:55 -0800] "GET /twiki/bin/view/Main/DCCAndPostFix HTTP/1.1" 200 5253
64.242.88.10 - - [07/Mar/2004:16:23:12 -0800] "GET /twiki/bin/oops/TWiki/AppendixFileSystem?template=oopsmore¶m1=1.12¶m2=1.12 HTTP/1.1" 200 11382
64.242.88.10 - - [07/Mar/2004:16:24:16 -0800] "GET /twiki/bin/view/Main/PeterThoeny HTTP/1.1" 200 4924
64.242.88.10 - - [07/Mar/2004:16:29:16 -0800] "GET /twiki/bin/edit/Main/Header_checks?topicparent=Main.ConfigurationVariables HTTP/1.1" 401 12851
64.242.88.10 - - [07/Mar/2004:16:30:29 -0800] "GET /twiki/bin/attach/Main/OfficeLocations HTTP/1.1" 401 12851
64.242.88.10 - - [07/Mar/2004:16:31:48 -0800] "GET /twiki/bin/view/TWiki/WebTopicEditTemplate HTTP/1.1" 200 3732
64.242.88.10 - - [07/Mar/2004:16:32:50 -0800] "GET /twiki/bin/view/Main/WebChanges HTTP/1.1" 200 40520
64.242.88.10 - - [07/Mar/2004:16:33:53 -0800] "GET /twiki/bin/edit/Main/Smtpd_etrn_restrictions?topicparent=Main.ConfigurationVariables HTTP/1.1" 401 12851
64.242.88.10 - - [07/Mar/2004:16:35:19 -0800] "GET /mailman/listinfo/business HTTP/1.1" 200 6379
64.242.88.10 - - [07/Mar/2004:16:36:22 -0800] "GET /twiki/bin/rdiff/Main/WebIndex?rev1=1.2&rev2=1.1 HTTP/1.1" 200 46373
64.242.88.10 - - [07/Mar/2004:16:37:27 -0800] "GET /twiki/bin/view/TWiki/DontNotify HTTP/1.1" 200 4140
64.242.88.10 - - [07/Mar/2004:16:39:24 -0800] "GET /twiki/bin/view/Main/TokyoOffice HTTP/1.1" 200 3853
64.242.88.10 - - [07/Mar/2004:16:43:54 -0800] "GET /twiki/bin/view/Main/MikeMannix HTTP/1.1" 200 3686
64.242.88.10 - - [07/Mar/2004:16:45:56 -0800] "GET /twiki/bin/attach/Main/PostfixCommands HTTP/1.1" 401 12846

Ta thực hiện lưu trữ file  này dưới đường dẫn /user/logs/access.log.

Ta thực hiện việc tạo 1 Hive table để map với các dữ liệu này.

CREATE EXTERNAL TABLE request(address STRING, info STRING) ROW FORMAT
              DELIMITED FIELDS TERMINATED BY '- -'
              LINES TERMINATED BY 'n'
              STORED AS TEXTFILE
              LOCATION '/user/logs/access.log';

Trong đó:

  • Dữ liệu trong access.log sẽ được map tới table “request”
  • Table request gồm có 2 column là adress và info tất cả đều có kiểu là STRING.
  • Các column được phân tách bằng nhóm ký hiệu “- -“, mỗi 1 line được đánh dấu kết thúc bằng ký hiệu “n”
  • Nơi chứa dữ liệu mà table request map tới là ”
    /user/logs/access.log"

     

Nếu không có exception nào được đưa ra thì ta có thể bắt đầu thực hiện việc truy vấn dữ liệu bên trong Hive table. Một số truy vấn mẫu:

Liệt kê tất cả thông tin thu được từ trong các table:

SELECT * FROM request;

Liệt kê các IP đã thực hiện truy cập tới:

SELECT DISTINCT address FROM request;

 

Liệt kê số lượng request theo từng IP:

SELECT address, count(1) FROM request
GROUP BY address ORDER BY address DESC;

 

Tài liệu tham khảo

1. Hadoop: The Definitive Guilde 2.0, Tom White, 2011

2. https://cwiki.apache.org/confluence/display/Hive/Home

 

Aside

Bài viết này tổng hợp những sự kiện chính liên quan tới Hệ sinh thái Hadoop trong tháng vừa rồi.

Aside

Despite some speculation over the past few days about what it means that Cloudera wants to port the Hive SQL-on-Hadoop engine onto the Spark processing framework, Cloudera Co-founder and Chief Strategy Officer Mike Olson (pictured above) says nothing much has changed. Well, nothing has changed with regard to Cloudera’s Impala product, that is. There’s actually quite a bit happening elsewhere in the Hadoop and Spark ecosystems.

Simply put, Olson said Impala is the future of interactive SQL queries on top of Hadoop as far as Cloudera is concerned. “Impala is flat-out faster than the fastest thing Hortonworks or anyone else has ever done with Hive,” he said.

Cloudera — along with IBM, MapR and spark startup Databricks — is working to port Hive onto Spark as an acknowledgement that Hive workloads are still very important to the company’s customer base and that “running on MapReduce, Hive really, really sucks.” But, Olson added, Hive was built to be a batch-processing atop MapReduce, and even though it will run faster on Spark or the Hortonworks-driven Apache Tez framework, it will still be a batch job.

(Actually, he added, Cloudera et al are committed to moving pretty much every existing MapReduce workload onto Spark, including stuff such as Sqoop and Pig. Spark is “light years better,” he noted, and “we think it will succeed MapReduce in most instances.”)

Some might be asking where Shark — the Spark subproject whose name is a mashup of Spark and Hive — fits into this. Olson confirmed (actually, he pointed to a Spark Summit keynote by Databricks’ Patrick Wendell) that Databricks will sunset Shark after the next Spark release, opting instead to focus its efforts on a project called Spark SQL that the company announced in April.

Around that time, Databricks CEO Ion Stoica told database industry analyst Curt Monash the same, although he also mentioned plans to continue developing an interactive engine called BlinkDB. “[I]f I were to redraw [the Spark stack diagram], SparkSQL will replace Shark, and Shark will eventually become a thin layer above SparkSQL and below BlinkDB,” Stoica told Monash.

Olson didn’t mention BlinkDB (although, admittedly, I didn’t ask) but he say he’s not thrilled with the idea of Spark SQL. He acknowledged that Databricks is a smart company and will likely do a competent job with Spark SQL, but added that moving Hive onto Spark is a fast process while SparkSQL is still a work in progress.

“I would rather see those guys put all their efforts into other things,” he said. “… I think Hive on Spark is going to be pretty good.”

Source: gigaom.com

Tổng quan về Graph Database

Graph (Computer Science)

Một cách không chính thức, graph (đồ thị) là một tập các đối tượng gọi là đỉnh nối với nhau bởi các cạnh. Thông thường, đồ thị được vẽ dưới dạng một tập các điểm (đỉnh, nút) nối với nhau bởi các đoạn thẳng (cạnh). Tùy theo ứng dụng mà một số cạnh có thể có hướng.

Graph là một cách mô hình hoá trực tiếp hầu hết tất cả mọi vấn đề. Đối với phim ma trận ta có một graph tương ứng sau:

matrix-graph

Tại sao lại là graph database (GD)

Chúng ta đã quá quen với cách biểu diễn theo cơ sở dữ liệu quan hệ (RD) truyền thống, nhưng với những bài toán cần nhiều quan hệ việc sử dụng RD để lưu trữ không phải là một giải pháp hay vì :

  • Việc biểu diễn quan hệ dưới dạng bảng không phải là một cách làm trực quan.
  • Các phép join thường tốn rất nhiều chi phí

Trong GD quan hệ là những liên kết trực tiếp giữa các thực thể (các đỉnh). Do đó GD giúp trả lời rất nhiều câu hỏi liên quan đến truy vấn dữ liệu một cách hiệu quả hơn so với RD, đồng thời khả năng trực quan hoá dữ liệu của GD so với RD cũng tốt hơn rất nhiều.

Giả sử ta có một cơ sở dữ liệu quan hệ lưu trữ thông tin người dùng và các bạn bè của họ như sau:

friend-rd

Rất phức tạp và tốn nhiều chi phí nếu muốn trả lời các câu hỏi sau:

  • Ai là bạn của bạn Alice
  • Giả sử Alice không quen Bob, vậy họ phải thông qua những ai để có thể làm quen với nhau một cách nhanh nhất

Tuy nhiên GD trả lời câu hỏi trên một cách rất trực tiếp và đơn giản!

Neo4j

Neo4j là một trong những GD phổ biển nhất hiện nay. Neo4j hỗ trợ ngôn ngữ truy vấn Cypher, một ngôn ngữ rất trực quan trong việc truy vấn dữ liệu dưới dạng Graph.

Đỉnh trong Neo4j

  • được ký hiệu là (A)
  • có thể có nhiều thuộc tính dưới dạng key:value
  • có thể có một hoặc nhiều nhãn (B: Person) : B có nhãn là Person

Cạnh trong Neo4j

  • được ký hiệu là -[rel]-
  • có thể có nhiều thuộc tính dưới dạng key:value
  • có duy nhất một kiểu của cạnh : (a)-[rel:KNOW]-(b) mô tả a và b được liên kết với nhau bởi cạnh rel có kiểu là KNOW
  • có thể có hướng : (a)-[rel:KNOW]->(b)

Case Study

Case study trong bài viết này sử dụng dataset movielens http://grouplens.org/datasets/movielens/.

MovieLens bao gồm ba thực thể chính:

  • Movie : các bộ phim
  • Genre : thể loại phim
  • User : người sử dụng

Và hai loại cạnh sau:

  • HAS_GENRE : là cạnh nối giữa phim và genre mô tả thể loại phim. Ví dụ: (M:Movie)-[:HAS_GENRE]->(G:Genre) phim M có thể loại là G
  • RATED : là cạnh nối giữa phim và user mô tả user đánh giá phim. Ví dụ: (U:User)-[:RATED]->(M:Movie) người sử dụng U đánh giá phim M
    • stars : là thuộc tính của cạnh RATED mô tả đánh giá của người sử dụng (từ 1 đến 5 sao)

Screen Shot 2014-06-10 at 3.43.15 PMMô tả giữa User và các Movie được RATED bởi User đó

Câu hỏi của case study này là ta có bộ phim “Toy Story” với movie_id=1. Ta cần đưa ra một tập các movie liên quan đến phim “Toy Story”.

Hướng giải quyết :

  • tìm tập U các người dùng đã đánh giá phim “Toy Story” với số sao lớn hơn 3
  • tìm tập R các phim được đánh giá bởi U
  • xếp hạng R theo số lượng người sử dụng đánh giá

movie-graph

Toy story

Ta cùng lần lượt điểm qua những câu truy vấn cypher giúp giải quyết vấn đề trên :

  • MATCH (n:Movie{movie_id:1}) RETURN n : lấy ra phim toy story
  • MATCH (t:Movie{movie_id:1})<-[r:RATED]-(u:User) WHERE r.stars>3 RETURN count(u) : lấy số lượng những người sử dụng đánh giá phim toy story lớn hơn 3 sao
  • MATCH (t:Movie{movie_id:1})<-[r:RATED]-(u:User)-[r2:RATED]->(t2:Movie) WHERE r.stars>3 AND r2.stars>3 RETURN t2.name,count(t2) ORDER BY count(t2) DESC LIMIT 25 : lấy ra tập phim tương tự dựa trên lượt đánh gía của người sử dụng

Cài đặt và thử nghiệm

Để có thể thử nghiệm case study đã trình bày ở trên :

  • Ta tiến hành download Neo4j bản mới nhất trên trang chủ của Neo4j http://www.neo4j.org.
  • Download movielens db cho Neo4j từ link sau movielens.db.zip
  • Giải nén db vừa download về copy vào thư mục data/graph.db của Neo4j
  • Thực hiện khởi chạy Neo4j bằng cách gõ lệnh bin/neo4j start
  • Truy cập vào trang web : http://localhost:7474 để thực hiện việc thử nghiệm truy vấn trên dữ liệu movielens

Đồng thời bạn có thể gõ lệnh :play movie graph để có thể được hướng dẫn về việc xây dựng ứng dụng The Movie Graph cùng Neo4j

Screen Shot 2014-06-10 at 4.31.08 PM

Neo4j trong môi trường bigdata

Neo4j cung cấp một môi trường rất trực quan cho những ai muốn tìm hiểu và khai thác graph database. Nhưng khi lưu trữ graph bằng Neo4j thì toàn bộ graph phải nằm trên một máy duy nhất. Đây là nhược điểm rất lớn của Neo4j, điều này khiến việc lưu trữ một big graph bao gồm rất nhiều đỉnh và cạnh bằng Neo4j là rất khó khăn.

Tuy nhiên vào năm 2010 Google có publish một bài báo về Pregel một mô hình hiệu quả cho việc xử lý big graph. Sau đó hai năm, apache đưa ra thư viện mã nguồn mở mới cài đặt mô hình Pregel là Apache Giraph dựa trên hệ sinh thái Hadoop. Đây chính là giải pháp cho việc lưu trữ và xử lý cho các bài toán liên quan đến big graph (facebook) mà chúng tôi sẽ trình bày trong những bài viết sau.