ขอแนะนำการฝังข้อความและโค้ดใน OpenAI API PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.

ขอแนะนำการฝังข้อความและโค้ดใน OpenAI API

ขอแนะนำการฝังข้อความและโค้ดใน OpenAI API

เรากำลังแนะนำการฝังซึ่งเป็นปลายทางใหม่ใน OpenAI API ที่ทำให้ง่ายต่อการใช้งานภาษาและโค้ดที่เป็นธรรมชาติ เช่น การค้นหาเชิงความหมาย การจัดกลุ่ม การสร้างแบบจำลองหัวข้อ และการจัดประเภท การฝังคือการแสดงตัวเลขของแนวคิดที่แปลงเป็นลำดับตัวเลข ซึ่งทำให้คอมพิวเตอร์เข้าใจความสัมพันธ์ระหว่างแนวคิดเหล่านั้นได้ง่าย การฝังของเรามีประสิทธิภาพเหนือกว่าโมเดลชั้นนำในการวัดประสิทธิภาพมาตรฐาน 3 แบบ รวมถึงการปรับปรุงการค้นหาโค้ดที่เกี่ยวข้อง 20%

อ่านเอกสารอ่านกระดาษ

การฝังมีประโยชน์สำหรับการทำงานกับภาษาและโค้ดที่เป็นธรรมชาติ เนื่องจากสามารถนำมาใช้และเปรียบเทียบได้โดยง่ายด้วยโมเดลการเรียนรู้ของเครื่องและอัลกอริธึมอื่นๆ เช่น การทำคลัสเตอร์หรือการค้นหา

ขอแนะนำการฝังข้อความและโค้ดใน OpenAI API
ขอแนะนำการฝังข้อความและโค้ดใน OpenAI API
ขอแนะนำการฝังข้อความและโค้ดใน OpenAI API
ขอแนะนำการฝังข้อความและโค้ดใน OpenAI API
ขอแนะนำการฝังข้อความและโค้ดใน OpenAI API
ขอแนะนำการฝังข้อความและโค้ดใน OpenAI API

การฝังที่มีตัวเลขใกล้เคียงกันก็มีความหมายคล้ายกันเช่นกัน ตัวอย่างเช่น เวกเตอร์การฝังของ "เพื่อนสุนัขพูดว่า" จะคล้ายกับเวกเตอร์การฝังของ "วูฟ" มากกว่าของ "เหมียว"

ขอแนะนำการฝังข้อความและโค้ดใน OpenAI API
ขอแนะนำการฝังข้อความและโค้ดใน OpenAI API

ปลายทางใหม่นี้ใช้โมเดลโครงข่ายประสาทเทียม ซึ่งเป็นลูกหลานของ GPT-3 เพื่อจับคู่ข้อความและโค้ดกับการแสดงเวกเตอร์ ซึ่ง "ฝัง" ไว้ในพื้นที่มิติสูง แต่ละมิติจะจับภาพบางแง่มุมของอินพุต

ใหม่ /ฝัง จุดสิ้นสุดใน เปิด AI API จัดเตรียมการฝังข้อความและโค้ดด้วยโค้ดสองสามบรรทัด:

import openai
response = openai.Embedding.create( input="canine companions say", engine="text-similarity-davinci-001")

เรากำลังเปิดตัวโมเดลการฝังสามกลุ่ม โดยแต่ละรุ่นได้รับการปรับแต่งเพื่อให้ทำงานได้ดีบนฟังก์ชันต่างๆ ได้แก่ ความคล้ายคลึงของข้อความ การค้นหาข้อความ และการค้นหาโค้ด โมเดลใช้ข้อความหรือโค้ดเป็นอินพุตและส่งคืนเวกเตอร์ที่ฝัง

Models ใช้กรณี
ความเหมือนของข้อความ: จับความคล้ายคลึงทางความหมายระหว่างส่วนต่างๆ ของข้อความ ความคล้ายคลึงกันของข้อความ-{ada, babbage, curie, davinci}-001 การจัดกลุ่ม การถดถอย การตรวจจับความผิดปกติ การสร้างภาพ
ค้นหาข้อความ: การดึงข้อมูลความหมายผ่านเอกสาร ค้นหาข้อความ-{ada, babbage, curie, davinci}-{query, doc}-001 การค้นหา ความเกี่ยวข้องของบริบท การดึงข้อมูล
ค้นหารหัส: ค้นหารหัสที่เกี่ยวข้องพร้อมข้อความค้นหาในภาษาธรรมชาติ รหัสค้นหา-{ada, babbage}-{รหัส ข้อความ}-001 การค้นหารหัสและความเกี่ยวข้อง

แบบจำลองความคล้ายคลึงของข้อความ

แบบจำลองความคล้ายคลึงของข้อความจัดให้มีการฝังที่จับความคล้ายคลึงกันทางความหมายของข้อความ โมเดลเหล่านี้มีประโยชน์สำหรับงานหลายอย่างรวมถึง การจัดกลุ่ม, การสร้างภาพข้อมูลและ การจัดหมวดหมู่.

การแสดงภาพแบบโต้ตอบต่อไปนี้แสดงการฝังตัวอย่างข้อความจากชุดข้อมูล DBpedia:

ลากเพื่อเลื่อน เลื่อน หรือบีบนิ้วเพื่อซูม

ฝังจาก text-similarity-babbage-001 รุ่นนำไปใช้กับ ดีบีพีเดีย ชุดข้อมูล เราสุ่มตัวอย่าง 100 ตัวอย่างจากชุดข้อมูลที่ครอบคลุม 5 หมวดหมู่ และคำนวณการฝังผ่าน /ฝัง จุดสิ้นสุด หมวดหมู่ต่างๆ จะแสดงเป็นคลัสเตอร์ที่ชัดเจน 5 กลุ่มในพื้นที่ฝัง เพื่อให้เห็นภาพพื้นที่ฝัง เราลดมิติการฝังจาก 2048 เป็น 3 โดยใช้ PCA. มีโค้ดสำหรับการแสดงภาพพื้นที่ฝังในมิติ 3 มิติ โปรดคลิกที่นี่เพื่ออ่านรายละเอียดเพิ่มเติม.

หากต้องการเปรียบเทียบความคล้ายคลึงของข้อความสองชิ้น คุณเพียงแค่ใช้ สินค้าจุด ในการฝังข้อความ ผลที่ได้คือ “คะแนนความคล้ายคลึง” ซึ่งบางครั้งเรียกว่า “ความคล้ายคลึงของโคไซน์” ระหว่าง –1 ถึง 1 โดยที่ตัวเลขที่สูงกว่าหมายถึงความคล้ายคลึงกันมากกว่า ในการใช้งานส่วนใหญ่ การฝังสามารถคำนวณล่วงหน้าได้ จากนั้นการเปรียบเทียบผลิตภัณฑ์ดอทก็สามารถทำได้อย่างรวดเร็วมาก

import openai, numpy as np resp = openai.Embedding.create( input=["feline friends go", "meow"], engine="text-similarity-davinci-001") embedding_a = resp['data'][0]['embedding']
embedding_b = resp['data'][1]['embedding'] similarity_score = np.dot(embedding_a, embedding_b)

การใช้การฝังที่ได้รับความนิยมอย่างหนึ่งคือใช้เป็นคุณลักษณะในงานการเรียนรู้ของเครื่อง เช่น การจัดประเภท ในเอกสารการเรียนรู้ของเครื่อง เมื่อใช้ตัวแยกประเภทเชิงเส้น งานการจัดหมวดหมู่นี้เรียกว่า "โพรบเชิงเส้น" แบบจำลองความคล้ายคลึงของข้อความของเราได้ผลลัพธ์ที่ทันสมัยที่สุดในการจำแนกประเภทโพรบเชิงเส้นใน ส่งEval (Conneau และคณะ, 2018) เกณฑ์มาตรฐานที่ใช้กันทั่วไปในการประเมินคุณภาพการฝัง

การจำแนกประเภทโพรบเชิงเส้นมากกว่า 7 ชุดข้อมูล
SOTA ก่อนหน้า (เกาและคณะ ปี 2021)
ลด 90.2%
ข้อความ-ความคล้ายคลึง-davinci-001
ลด 92.2%
แสดงมากขึ้น

แบบจำลองการค้นหาข้อความ

โมเดลการค้นหาข้อความมีการฝังที่ช่วยให้สามารถค้นหางานในวงกว้างได้ เช่น การค้นหาเอกสารที่เกี่ยวข้องในคอลเลกชั่นของเอกสารที่ได้รับจากการสอบถามข้อความ มีการฝังเอกสารและคิวรีแยกกัน จากนั้นจึงใช้ความคล้ายคลึงของโคไซน์เพื่อเปรียบเทียบความคล้ายคลึงระหว่างคิวรีกับแต่ละเอกสาร

การค้นหาโดยใช้การฝังสามารถสรุปได้ดีกว่าเทคนิคการทับซ้อนของคำที่ใช้ในการค้นหาคีย์เวิร์ดแบบคลาสสิก เนื่องจากจะรวบรวมความหมายเชิงความหมายของข้อความและมีความละเอียดอ่อนน้อยกว่าต่อวลีหรือคำที่ตรงกันทั้งหมด เราประเมินประสิทธิภาพของรูปแบบการค้นหาข้อความบน เบียร์ (ธาคูร์ และคณะ ปี 2021) ชุดประเมินผลการค้นหาและได้ประสิทธิภาพการค้นหาที่ดีกว่าวิธีก่อนหน้า ของเรา คู่มือการค้นหาข้อความ ให้รายละเอียดเพิ่มเติมเกี่ยวกับการใช้การฝังสำหรับงานค้นหา

รหัสค้นหารุ่น

โมเดลการค้นหาโค้ดมีการฝังโค้ดและข้อความสำหรับงานค้นหาโค้ด เมื่อได้รับชุดโค้ดบล็อก ภารกิจคือค้นหาบล็อกโค้ดที่เกี่ยวข้องสำหรับการสืบค้นด้วยภาษาธรรมชาติ เราประเมินโมเดลการค้นหาโค้ดบน CodeSearchNet (Husian และคณะ, 2019) ชุดประเมินผลซึ่งการฝังของเราให้ผลลัพธ์ที่ดีกว่าวิธีการก่อนหน้านี้อย่างมีนัยสำคัญ ตรวจสอบ คู่มือการค้นหารหัส เพื่อใช้การฝังสำหรับการค้นหาโค้ด

ความแม่นยำโดยเฉลี่ยมากกว่า 6 ภาษาโปรแกรม
SOTA ก่อนหน้า (กัว และคณะ ปี 2021)
ลด 77.4%
รหัสค้นหา Babbage-{doc, query}-001
ลด 93.5%
แสดงมากขึ้น

ตัวอย่างของ Embeddings API ในการดำเนินการ

การวิจัย JetBrains

งานวิจัยของ JetBrains ห้องปฏิบัติการฟิสิกส์อนุภาคดาราศาสตร์ วิเคราะห์ข้อมูลเช่น โทรเลขของนักดาราศาสตร์ และของนาซ่า หนังสือเวียน GCNซึ่งเป็นรายงานที่มีเหตุการณ์ทางดาราศาสตร์ที่ไม่สามารถแยกวิเคราะห์ด้วยอัลกอริธึมแบบเดิมได้

นักวิจัยสามารถค้นหาเหตุการณ์ต่างๆ เช่น "crab pulsar bursts" ได้จากฐานข้อมูลและสิ่งพิมพ์ต่างๆ ที่ขับเคลื่อนโดยการฝังรายงานทางดาราศาสตร์เหล่านี้ของ OpenAI การฝังยังได้รับความแม่นยำ 99.85% ในการจัดประเภทแหล่งข้อมูลผ่านการจัดกลุ่มแบบ k-mean

ปรับจูนการเรียนรู้

ปรับจูนการเรียนรู้ เป็นบริษัทที่สร้างโซลูชั่น AI ของมนุษย์และปัญญาประดิษฐ์เพื่อการเรียนรู้ เช่น วงจรการเรียนรู้แบบปรับตัว ที่ช่วยให้นักศึกษาบรรลุมาตรฐานทางวิชาการ

การฝังของ OpenAI ช่วยปรับปรุงงานในการค้นหาเนื้อหาตำราเรียนตามวัตถุประสงค์การเรียนรู้ได้อย่างมาก ด้วยความแม่นยำ 5 อันดับแรกที่ 89.1% โมเดลการฝังข้อความ-ค้นหา-กูรีของ OpenAI มีประสิทธิภาพเหนือกว่าวิธีการก่อนหน้า เช่น Sentence-BERT (64.5%) แม้ว่าผู้เชี่ยวชาญที่เป็นมนุษย์จะยังดีกว่า แต่ทีม FineTune ก็สามารถติดป้ายกำกับหนังสือเรียนทั้งหมดได้ในเวลาไม่กี่วินาที ตรงกันข้ามกับชั่วโมงที่ผู้เชี่ยวชาญใช้

เปรียบเทียบการฝังของเรากับประโยค-BERT ค้นหา GPT-3 และผู้เชี่ยวชาญเฉพาะด้านของมนุษย์เพื่อจับคู่เนื้อหาตำราเรียนกับวัตถุประสงค์ที่เรียนรู้ เรารายงาน ความแม่นยำ@kจำนวนครั้งที่คำตอบที่ถูกต้องอยู่ในการคาดการณ์ระดับบนสุด

Fabius

Fabius ช่วยให้บริษัทเปลี่ยนการสนทนากับลูกค้าให้เป็นข้อมูลเชิงลึกที่มีโครงสร้างซึ่งให้ข้อมูลการวางแผนและการจัดลำดับความสำคัญ การฝังของ OpenAI ช่วยให้บริษัทต่างๆ ค้นหาและติดแท็กบันทึกการโทรของลูกค้าได้ง่ายขึ้นด้วยคำขอคุณลักษณะ

ตัวอย่างเช่น ลูกค้าอาจใช้คำว่า "อัตโนมัติ" หรือ "ใช้งานง่าย" เพื่อขอแพลตฟอร์มบริการตนเองที่ดีกว่า ก่อนหน้านี้ Fabius ใช้การค้นหาด้วยคีย์เวิร์ดที่คลุมเครือเพื่อพยายามติดแท็กการถอดเสียงเหล่านั้นด้วยป้ายกำกับแพลตฟอร์มแบบบริการตนเอง ด้วยการฝังของ OpenAI ในตอนนี้ พวกเขาสามารถพบตัวอย่างโดยทั่วไปเพิ่มขึ้น 2 เท่า และตัวอย่างเพิ่มเติม 6 เท่า–10 เท่าสำหรับคุณสมบัติที่มีกรณีการใช้งานที่เป็นนามธรรมซึ่งไม่มีคำหลักที่ชัดเจนที่ลูกค้าอาจใช้

ลูกค้า API ทั้งหมดสามารถเริ่มต้นด้วย เอกสารฝังตัว สำหรับการใช้การฝังในแอปพลิเคชัน

อ่านเอกสาร


กิตติกรรมประกาศ

ขอขอบคุณผู้มีส่วนสนับสนุนในรุ่นนี้:

Tao Xu, Chris Hallacy, Raul Puri, Alec Radford, Jesse Michael Han, Jerry Tworek, Qiming Yuan, Nikolas Tezak, Jong Wook Kim, Johannes Heidecke, Pranav Shyam, Tyna Eloundou Nekoul, Girish Sastry, Gretchen Krueger, David Schnurr, Felipe Petroski เช่น Kenny Hsu, Madeleine Thompson, Tabarak Khan และ Toki Sherbakov

ขอขอบคุณสำหรับความคิดเห็นของพวกเขาในโพสต์นี้: Tom Kleinpeter, Morgan Gallant, Sam Altman, Ilya Sutskever, Steve Dowling, Rachel Lim, Arun Vijayvergiya, Rajeev Nayak, Peter Welinder, Justin Jay Wang

.vector-diagram img { แสดง: ไม่มี;
}
.vector-diagram img: first-child { แสดง: บล็อก;
}

var printResponse = function (btn) { // ผนวกการตอบสนอง var responseEl = เอกสาร .querySelector ('.endpoint-code-response') .querySelector ('code') var callParentEl = เอกสาร .querySelector ('.endpoint-code-call' ) .querySelector('pre') ถ้า (!responseEl || !callParentEl) กลับมา; โทรParentEl.appendChild(responseEl); // ปุ่มซ่อน btn.style.display= 'ไม่มี';
}; var initRotate = ฟังก์ชัน () { var หมุน = document.querySelectorAll ('.js-rotate'); ถ้า (!rotates.length) ส่งคืน; // สำหรับแต่ละชุดของการหมุน turns.forEach (ฟังก์ชัน (r) { // ย้ายลูกคนแรกเพื่อสิ้นสุดทุก ๆ n วินาที window.setInterval (ฟังก์ชัน (){ moveToEnd (r, r.firstElementChild); }, 1500); }) ;
};
var moveToEnd = ฟังก์ชั่น (พาเรนต์, ลูก) { parent.removeChild (ลูก); parent.appendChild (เด็ก); // ต่อท้าย parent
}; var initShowMore = ฟังก์ชั่น () { var showmores = document.querySelectorAll ('.js-showmore'); showmores.forEach(function (e) { e.addEventListener('click', function () { var showmoreparent = this.parentElement; if (!showmoreparent) return; var more = showmoreparent.querySelector('.js-more'); ถ้า (!more) กลับมา more.style.display = 'block'; this.style.display = 'none'; }); });
}; // ในนั้น
document.addEventListener ('DOMContentLoaded', ฟังก์ชัน () { initRotate (); initShowMore ();
});
นำเข้า {Runtime, Inspector, Library} จาก “https://unpkg.com/@observablehq/runtime@4.5.0/dist/runtime.js”;
import notebook_topk from “https://api.observablehq.com/d/20c1e51d6e663e6d.js?v=3”;
นำเข้า notebook_embed3d จาก "https://api.observablehq.com/d/fef0801cb0a0b322.js?v=3" const customWidth = function (ตัวเลือก) { return (new Library).Generators.observe (function (change) { var width = change(document.querySelector(selector).clientWidth); function resized() { var w = document.querySelector(selector).clientWidth; if (w !== width) change(width = w); } window.addEventListener(“ ปรับขนาด”, ปรับขนาด); ฟังก์ชั่นส่งคืน () { window.removeEventListener ("ปรับขนาด" ปรับขนาด); }; });
}; const topk_renders = { “แผนภูมิ”: “#topk-chart”,
};
รันไทม์ใหม่ (Object.assign (ไลบรารีใหม่ {ความกว้าง: customWidth (“#topk-chart”)})) โมดูล (notebook_topk ชื่อ => { ตัวเลือก const = topk_renders [ชื่อ]; ถ้า (ตัวเลือก) { // คีย์ มีอยู่ return new Inspector(document.querySelector(selector)); } else { return true; }
}); const embed3d_renders = { “แผนภูมิ”: “#embed3d-แผนภูมิ”, “ตำนาน”: “#embed3d-ตำนาน”,
};
รันไทม์ใหม่ (Object.assign (ไลบรารีใหม่ {ความกว้าง: customWidth (“# embed3d-chart”)})) โมดูล (notebook_embed3d ชื่อ => { ตัวเลือก const = embed3d_renders [ชื่อ]; ถ้า (ตัวเลือก) { // คีย์ มีอยู่ return new Inspector(document.querySelector(selector)); } else { return true; }
});

ประทับเวลา:

เพิ่มเติมจาก OpenAI