Spaces:
Sleeping
Sleeping
File size: 9,051 Bytes
3d94c69 770f117 67642be add2c8d 3d94c69 c99ad19 3d94c69 c99ad19 5782a53 c99ad19 5782a53 c99ad19 5782a53 c99ad19 5782a53 c99ad19 3d94c69 5782a53 c99ad19 5782a53 3d94c69 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | # 1. νμν λꡬ νκΊΌλ²μ μ€μΉ
import gradio as gr
from sentence_transformers import SentenceTransformer, util
# 2. λͺ¨λΈκ³Ό λ°μ΄ν° μ€λΉ (λ± ν λ²λ§ μ€νλ¨)
model = SentenceTransformer('jhgan/ko-sroberta-multitask')
physics_kb = [
"μλμ± μ΄λ‘ : μ곡κ°μ κ΄μ°°μμ λ°λΌ μλμ μ΄λ©° μ€λ ₯μ μν΄ νμ΄μ§ μ μμ΅λλ€.",
"μμ μν: 미립μμ μΈκ³μμλ κ΄μΈ‘ μ κΉμ§ μ¬λ¬ μνκ° μ€μ²©λμ΄ μ‘΄μ¬ν©λλ€.",
"μ΄μν μ 2λ²μΉ: κ³ λ¦½κ³μ μνΈλ‘νΌ(무μ§μλ)λ μκ°μ΄ νλ₯Όμλ‘ νμ μ¦κ°ν©λλ€.",
"λ΄ν΄μ μ 3λ²μΉ: λͺ¨λ μμ©μλ ν¬κΈ°κ° κ°κ³ λ°©ν₯μ΄ λ°λμΈ λ°μμ©μ΄ μ‘΄μ¬ν©λλ€.",
"κ°μλ: λ¨μ μκ°λΉ 물체μ μλκ° λ³νλ μ λλ₯Ό λνλ΄λ 물리λμ
λλ€.",
"κ°μ μ’νκ³: κ°μλ μ΄λμ νλ κ΄μ°°μκ° κΈ°μ€μ΄ λλ μ’νκ³λ‘, κ΄μ±λ ₯μ΄ λνλ©λλ€.",
"κ°μλ: μμ΄λ νλ λ¬Όμ²΄κ° λ¨μ μκ°λΉ νμ νλ κ°λλ₯Ό μλ―Έν©λλ€.",
"κ°μ 무λ¬: λ κ° μ΄μμ νλμ΄ κ²Ήμ³μ§λ©΄μ 보κ°λκ±°λ μμλμ΄ λνλλ λ°κ³ μ΄λμ΄ λ¬΄λ¬μ
λλ€.",
"κ°μ μ 체: μΈλΆ μ κΈ°μ₯μ΄ μμ΄λ λΆκ·Ήμ μ μ§νλ©°, μ κΈ°μ₯μ μν΄ λΆκ·Ή λ°©ν₯μ΄ λ°λλ λ¬Όμ§μ
λλ€.",
"κ²μ κΈ°: μ μ κΈ° μ λ νμμ μ΄μ©νμ¬ λ¬Όμ²΄μ λμ μ¬λΆλ₯Ό μμλ΄λ μ₯μΉμ
λλ€.",
"곡λͺ
μ§λμ: λ¬Όμ²΄κ° κ°μ§ κ³ μ μ§λμμ μΈλΆ νμ μ§λμκ° μΌμΉνμ¬ μ§νμ΄ μ΅λκ° λλ μ§μ μ
λλ€.",
"곡μ : ν μ²μ²΄κ° λ€λ₯Έ μ²μ²΄μ μ£Όμλ₯Ό μΌμ ν κΆ€λλ₯Ό λ°λΌ λλ μ΄λμ
λλ€.",
"κ΄μμ(κ΄μ): λΉμ μ
μλ‘ λ³΄μμ λμ μ΅μ λ¨μλ‘, μλμ§λ₯Ό κ°μ§ μ
μμ
λλ€.",
"κ΄μ ν¨κ³Ό: κΈμμ λΉμ λΉμΆμμ λ μ μκ° νμ΄λμ€λ νμμΌλ‘ λΉμ μ
μμ±μ μ¦λͺ
ν©λλ€.",
"ꡬμ¬λ ₯: μμ΄λ νλ 물체λ₯Ό μμ μ€μ¬ λ°©ν₯μΌλ‘ λμ΄λΉκΈ°λ νμ
λλ€.",
"κΈ°μ λ ₯: νλ‘μ μ λ₯λ₯Ό νλ₯΄κ² νλ μλλ ₯μ΄ λλ μ μμ
λλ€.",
"λ¨μ§μ: μ€μ λ§€λ¬λ¦° μΆκ° μ€λ ₯μ μν΄ μΌμ ν μ£ΌκΈ°λ₯Ό κ°μ§κ³ μ볡 μ΄λμ νλ μ₯μΉμ
λλ€.",
"λμ 체: μ κΈ°λ₯Ό λ κ³ μλ 물체λ₯Ό μλ―Έν©λλ€.",
"λνλ¬ ν¨κ³Ό: νμκ³Ό κ΄μ°°μμ μλμ μ΄λμΌλ‘ μΈν΄ μ리λ λΉμ μ§λμκ° λ³νλ νμμ
λλ€.",
"λλ¦Όν(ν ν¬): 물체λ₯Ό νμ μν€λ €λ νμ μμ©μΌλ‘, νμ ν¬κΈ°μ νμ κΈΈμ΄μ λΉλ‘ν©λλ€.",
"λλΈλ‘μ΄ν: μμ§μ΄λ λͺ¨λ μ
μκ° νλμ μ±μ§μ κ°λλ€λ μ΄λ‘ μμμ νλμ
λλ€.",
"λ±κ°μλ μ΄λ: κ°μλκ° μκ°μ λ°λΌ λ³νμ§ μκ³ μΌμ ν μ΄λμ
λλ€.",
"λΌλμ: μμ λ°μ§λ¦κ³Ό νΈμ κΈΈμ΄κ° κ°μ λμ κ°λλ₯Ό 1λ‘ μ μνλ λ¨μμ
λλ€.",
"λ μΈ λ²μΉ: μ μκΈ° μ λ μ μ λ μ λ₯λ μκΈ°μ₯μ λ³νλ₯Ό λ°©ν΄νλ λ°©ν₯μΌλ‘ νλ¦
λλ€.",
"λ§μ°°λ ₯: 물체μ μ΄λμ λ°©ν΄νλ νμΌλ‘ μ μ΄λ©΄μ μ±μ§κ³Ό λλ₯΄λ νμ λΉλ‘ν©λλ€.",
"무μ μΈμ(RFID): μ νλ₯Ό μ΄μ©νμ¬ λ¨Ό 거리μμ μ 보λ₯Ό μΈμνλ κΈ°μ μ
λλ€.",
"λ¬Όμ§ν: μ μμ κ°μ μ
μκ° λνλ΄λ νλμ μ±μ§μ
λλ€.",
"λ°μ΄μ΄μ€ μ μ: λ°λ체 μμκ° μλνλλ‘ μΈλΆμμ κ±Έμ΄μ£Όλ μ μμ
λλ€.",
"λ°λ체: λ체μ λΆλ체μ μ€κ° μ±μ§μ κ°μ§λ©°, μ¨λλ λΆμλ¬Όμ μν΄ μ κΈ° μ λμ±μ΄ λ³ν©λλ€.",
"λ°μ κΈ°: μνμ μλμ§λ₯Ό μ μκΈ° μ λ λ²μΉμ μ΄μ©ν΄ μ κΈ° μλμ§λ‘ λ°κΎΈλ μ₯μΉμ
λλ€.",
"λ³΄μ΄ μμ λͺ¨ν: μ μκ° νΉμ κΆ€λμμλ§ μλμ§ λ°©μΆ μμ΄ νμ νλ€λ μμ λͺ¨λΈμ
λλ€.",
"λΆνμ μ± μ리: μ
μμ μμΉμ μ΄λλμ λμμ μ ννκ² μΈ‘μ ν μ μλ€λ μμ μνμ μ리μ
λλ€.",
"λΈλν: μ€λ ₯μ΄ κ·Ήλ¨μ μΌλ‘ κ°ν΄ λΉμ‘°μ°¨ λΉ μ Έλκ° μ μλ μ²μ²΄μ
λλ€.",
"λΉμ΄: λ¬Όμ§ 1gμ μ¨λλ₯Ό 1λ μ¬λ¦¬λ λ° νμν μ΄λμ
λλ€.",
"λΉμ κ΅΄μ : λΉμ΄ λ€λ₯Έ λ§€μ§λ‘ λ€μ΄κ° λ μλ μ°¨μ΄λ‘ μΈν΄ μ§ν λ°©ν₯μ΄ κΊΎμ΄λ νμμ
λλ€.",
"μλμ± μ΄λ‘ : μ곡κ°μ΄ κ΄μ°°μμ μνλ μ€λ ₯μ λ°λΌ μλμ μ΄λΌλ μμΈμνμΈμ μ΄λ‘ μ
λλ€.",
"μλ³΄μ± μ리: λΉμ΄λ μ μκ° μ
μμ±κ³Ό νλμ±μ λμμ κ°μ§λ©° μν©μ λ°λΌ ν μͺ½μ΄ λνλλ€λ μ리μ
λλ€.",
"μλΉ μ λ ₯: μ κΈ° μ₯μΉκ° λ¨μ μκ° λμ μ¬μ©νλ μ κΈ° μλμ§μ μμ
λλ€.",
"μλ λ
Έμ΄λ: μν΅νμΌλ‘ μ΄μ΄νκ² κ°μ μ½μΌλ‘, μ λ₯κ° νλ₯΄λ©΄ λ΄λΆμμ μΌμ ν μκΈ°μ₯μ΄ μκΉλλ€.",
"μ‘μ : λ°μ μμμ λ§λ μ κΈ°λ₯Ό μμ©κ°κΉμ§ 보λ΄λ κ³Όμ μ
λλ€.",
"μμ§ νλ ₯: λ©΄μ΄ λ¬Όμ²΄λ₯Ό μμ§μΌλ‘ λ λ°μΉλ νμ
λλ€.",
"μλ’°λ©κ±°μ κ³ μμ΄: μμ μνμ μ€μ²© μνλ₯Ό μ€λͺ
νκΈ° μν μ λͺ
ν μ¬κ³ μ€νμ
λλ€.",
"μ€μΉΌλΌλ: λ°©ν₯ μμ΄ ν¬κΈ°λ§μΌλ‘ λνλ΄λ 물리λ(μ§λ, μκ° λ±)μ
λλ€.",
"μ곡κ°: μκ°κ³Ό 곡κ°μ λΆλ¦¬ν μ μλ νλμ 4μ°¨μμ μ°μμ²΄λ‘ λ³΄λ κ°λ
μ
λλ€.",
"μ΄μν μ 1λ²μΉ: μλμ§λ μμ±λκ±°λ μλ©Έλμ§ μκ³ ννλ§ λ°λλ€λ μλμ§ λ³΄μ‘΄ λ²μΉμ
λλ€.",
"μ΄μν μ 2λ²μΉ: κ³ λ¦½κ³μ μνΈλ‘νΌλ νμ μ¦κ°νλ λ°©ν₯μΌλ‘ μΌμ΄λλ€λ λ²μΉμ
λλ€.",
"μμ μ€ν: λΉμ κ°μ νμμ ν΅ν΄ λΉμ΄ νλμμ μ¦λͺ
ν μ€νμ
λλ€. ",
"μ΄μ λ²μΉ: μ λ₯μ μΈκΈ°λ μ μμ λΉλ‘νκ³ μ νμ λ°λΉλ‘νλ€λ λ²μΉμ
λλ€.",
"μμ¬λ ₯: μμ΄λ νλ κ΄μ°°μκ° λλΌλ, μ€μ¬ λ°μΌλ‘ λκ°λ €λ κ°μμ νμ
λλ€.",
"μ λ κΈ°μ λ ₯: μκΈ°μ₯μ λ³νμ μν΄ μ½μΌμ λ°μνλ μ μμ
λλ€.",
"μ μ λΆκ·Ή: μ μ°μ²΄μ μ κΈ°μ₯μ κ°ν λ μμ λ΄ μ νκ° μ¬λ°°μΉλμ΄ μ κΈ°λ₯Ό λ λ νμμ
λλ€.",
"μ΄μ€ μ¬λ¦Ώ μ€ν: μ μλ λΉμ΄ λ κ°μ νμ μ§λ κ°μ 무λ¬λ₯Ό λ§λλ μ€νμ
λλ€.",
"μΌ-μ΄λ μλμ§ μ 리: 물체μ ν΄μ€ μΌμ μμ 물체μ μ΄λ μλμ§ λ³νλκ³Ό κ°λ€λ μ 리μ
λλ€.",
"μκΈ°λ ₯: μμμ΄λ μ λ₯κ° νλ₯΄λ λμ μ¬μ΄μμ μμ©νλ νμ
λλ€.",
"μ κΈ°μ₯: μ νκ° μ£Όμ 곡κ°μ μ κΈ°λ ₯μ λ―ΈμΉλ 곡κ°μ
λλ€.",
"μ μκΈ° μ λ: μκΈ°μ₯μ λ³νκ° μ λ₯λ₯Ό λ°μμν€λ νμμ
λλ€.",
"μ μ κΈ° μ λ: λμ 체λ₯Ό κ°κΉμ΄ ν λ 물체 λ΄λΆμ μ νκ° μ΄λνμ¬ μ κΈ°λ₯Ό λ λ νμμ
λλ€.",
"μ€λ ₯ κ°μλ: μ§κ΅¬ μ€λ ₯μ μν΄ μμ λν νλ λ¬Όμ²΄κ° μ»λ κ°μλ(μ½ 9.8m/sΒ²)μ
λλ€.",
"μΌνλ¬ μ 1λ²μΉ(νμ κΆ€λ λ²μΉ): νμ±μ νμμ ν μ΄μ μΌλ‘ νλ νμ κΆ€λλ₯Ό λλλ€. ",
"ν°λλ§ ν¨κ³Ό: μ
μκ° μλμ§κ° λΆμ‘±ν΄λ μμ μνμ νλ₯ λ‘ μ₯λ²½μ ν΅κ³Όνλ νμμ
λλ€.",
"ν¨λ¬λ°μ΄ λ²μΉ: μκΈ°μ₯μ λ³νκ° ν΄μλ‘ λ ν° μ λ κΈ°μ λ ₯μ΄ λ°μνλ€λ λ²μΉμ
λλ€.",
"ν€λ₯΄μΈ μ€ν: μ€νμ ν΅ν΄ μ μκΈ°νμ μ‘΄μ¬λ₯Ό μ²μμΌλ‘ μ¦λͺ
ν μ°κ΅¬μ
λλ€."
]
encoded_kb = model.encode(physics_kb)
# 3. μ§λ¬Έμ λ΅νλ ν΅μ¬ κΈ°λ₯ (μ νλ λνμ λ²μ !)
def physics_bot(user_question):
# μ μ²λ¦¬: μ§λ¬Έμμ 곡백, λ¬Όμν, λ§μΉ¨νλ₯Ό λ€ μ§μλ²λ¦½λλ€.
clean_q = user_question.replace(" ", "").replace("?", "").replace(".", "")
# [κ°λ ₯ μ‘°μΉ] λ¨μ΄κ° ν€μλμ 'μμ ν' μΌμΉνλμ§ λ¨Όμ νμΈ
for item in physics_kb:
# μ½λ‘ (:) μλΆλΆμ΄ ν€μλμ
λλ€.
keyword = item.split(":")[0].strip()
clean_k = keyword.replace(" ", "")
# μ¬μ©μκ° μ
λ ₯ν κ² ν€μλλ λκ°κ±°λ, ν€μλκ° μ§λ¬Έμ ν¬ν¨λμ΄ μμΌλ©΄ λ°λ‘ μΆλ ₯!
if clean_q == clean_k or clean_q == clean_k + "λ" or clean_q == clean_k + "μ΄λμΌ":
return item
# λ§μ½ μμμ λͺ» μ°ΎμΌλ©΄, κ·Έλ AI λͺ¨λΈ(SentenceTransformer)μ΄ λΉμ·ν¨μ κ³μ°ν©λλ€.
query_vec = model.encode(user_question)
scores = util.cos_sim(query_vec, encoded_kb)[0]
best_idx = scores.argmax()
return physics_kb[best_idx]
# 4. β
λ§λ²μ ꡬκ°: μΉ νλ©΄ λ§λ€κΈ°β
demo = gr.Interface(
fn=physics_bot,
inputs=gr.Textbox(label="물리μ λν΄ κΆκΈν κ²μ λ¬Όμ΄λ³΄μΈμ!", placeholder="μ: μνΈλ‘νΌκ° λμΌ?"),
outputs=gr.Textbox(label="AI 물리νμμ λ΅λ³"),
title="λλ§μ AI 물리 μ¬μ ",
description="Hugging Face λͺ¨λΈμ μ΄μ©ν΄ 물리 μ§μμ μλ €μ£Όλ μ±λ΄μ
λλ€."
)
# μ€ν! (λμ€λ URLμ ν΄λ¦νλ©΄ μΉνμ΄μ§κ° λΉλλ€)
demo.launch(share=True) |