369 okumalar
369 okumalar

Daha Akıllı Bir Mağaza Oluşturun: GPT'nin Ürünlerinizi Etiketlemeye Ve Sonraki Satıcıları Tahmin Etmesine İzin Verin

ile LJ11m2025/05/08
Read on Terminal Reader

Çok uzun; Okumak

CocoIndex, sürekli kaynak güncellemeleri ile bilgi grafiklerini oluşturmayı ve sürdürmeyi kolaylaştırır. Ürün taksonomi, ürün kataloglarını mantıksal ve hijerarşik bir yapıya göre düzenlemek için bir yoludur.
featured image - Daha Akıllı Bir Mağaza Oluşturun: GPT'nin Ürünlerinizi Etiketlemeye Ve Sonraki Satıcıları Tahmin Etmesine İzin Verin
LJ HackerNoon profile picture
0-item
1-item

Bu blogda, birknowledge graphTaksonomi ve ek taksonomi kullanılarak ürün önerileri için.CocoIndex Hakkındasürekli kaynak güncellemeleri ile bilgi grafikleri oluşturmak ve sürdürmek kolaylaştırır.


Product taxonomy iÜrün kataloglarını mantıksal ve hijerarşik bir yapıda organize etmenin bir yolu; büyük bir ayrıntılı açıklama bulunabilir.burdaUygulamada, bu karmaşık bir sorun: bir ürün birden fazla kategoriye ait olabilir ve bir kategori birden fazla ebeveyn olabilir.


Ürün açıklamalarından taksonomların bir listesini çıkarmak için LLM'yi kullanacağız. ayrıca, her ürün için tamamlayıcı taksonomların bir listesini oluşturmak için LLM'yi kullanacağız - örneğin, birisi bir not defteri satın aldığında, ek bir ürün olarak bir kalem satın alabilirler. Ürün önerileri veya etiketleme için daha da kullanılabilecek ürünler arasındaki ilişkileri keşfetmek için Bilgi Grafiği kullanacağız.


Kaynak kodu mevcutturCocoIndex Örnekleri - product_taxonomy.


Sürekli iyileştirme yapıyoruz ve daha fazla özellik ve örnek yakında geliyor.starringour GitHub Repo Hakkında.

GitHub Repo Hakkında

Ön koşullar

  • CocoIndex, PostgreSQL'i içsel olarak arttırıcı işlemler için kullanır.
  • Neo4j, bir grafik veritabanı kurun.
  • Alternatif olarak, LLM modellerini yerel olarak çalıştıran Ollama'ya geçebilirsiniz.

Belgelendirme

Property Graph Targets için resmi CocoIndex Dokümantasyonunu okuyabilirsinizburda.

Bilgi Grafiği oluşturmak için veri akışı

genel bakış

Nükleer akım yaklaşıkPython kodunun 100 satırları.


Bir veri akışı ilan edeceğiz

  1. Ürün Yorumları (JSON)
  2. for each product,
    • parse JSON
    • map & clean up data
    • extract taxonomy from the mapped data
  3. verileri toplamak
  4. Neo4j'e veri aktarımı

Kaynak olarak belgeleri ekle

@cocoindex.flow_def(name="StoreProduct")
def store_product_flow(flow_builder: cocoindex.FlowBuilder, data_scope: cocoindex.DataScope):
    data_scope["products"] = flow_builder.add_source(
        cocoindex.sources.LocalFile(path="products",
                                    included_patterns=["*.json"]),
        refresh_interval=datetime.timedelta(seconds=5))

Buradaflow_builder.add_sourceyaratır aÇekilişve .filenameBu da anahtarın anahtarıdır.


data ingestion

Data Collectors ekleme

Ürün, taksonomi ve ek taksonomi toplamak için kök kapsamına koleksiyoner ekleyin.

product_node = data_scope.add_collector()
product_taxonomy = data_scope.add_collector()
product_complementary_taxonomy = data_scope.add_collector()

Her ürünün işlemi

Her ürün için JSON dosyasını analiz edeceğiz ve verileri aşağıdaki işleme için ihtiyacımız olan biçime dönüştürüyoruz.

Bilgi Haritası

@cocoindex.op.function(behavior_version=2)
def extract_product_info(product: cocoindex.typing.Json, filename: str) -> ProductInfo:
    return ProductInfo(
        id=f"{filename.removesuffix('.json')}",
        url=product["source"],
        title=product["title"],
        price=float(product["price"].lstrip("$").replace(",", "")),
        detail=Template(PRODUCT_TEMPLATE).render(**product),
    )

Burada bir veri haritası işlevini tanımlıyoruz, örneğin,

  • id alanını temizle
  • Etiket arşivi: title
  • Fiyat alanını temizle
  • Tüm alanlara dayanan ürün ayrıntıları için bir markdown dizisi oluşturun (LLM'nin taksonomi ve taksonomi ayrıntılarını çıkarmak için, markdown'un LLM için bağlam olarak en iyi çalıştığını düşünüyoruz).

akış

Akış içinde, her ürün JSON'u işlemek için veri haritalama dönüşümünü takıyoruz.

with data_scope["products"].row() as product:
    data = (product["content"]
            .transform(cocoindex.functions.ParseJson(), language="json")
            .transform(extract_product_info, filename=product["filename"]))
    product_node.collect(id=data["id"], url=data["url"], title=data["title"], price=data["price"])
  1. İlk transform() JSON dosyasını analiz eder.
  2. İkinci transform() tanımlanmış veri haritasını gerçekleştirir.
  3. Neo4j'deki ürün düğmesine ihtiyacımız olan alanları topluyoruz.


data mapping


LLM kullanarak taksonomi ve tamamlayıcı taksonomi çıkarın

Ürün Taksonomi Tanımları

LLM'yi ürün taksonomisini çıkarmak için kullandığımızdan, ders düzeyinde ayrıntılı bir talimat vermek zorundayız.

@dataclasses.dataclass
class ProductTaxonomy:
    """
    Taxonomy for the product.
    
    A taxonomy is a concise noun (or short noun phrase), based on its core functionality, without specific details such as branding, style, etc.

    Always use the most common words in US English.

    Use lowercase without punctuation, unless it's a proper noun or acronym.

    A product may have multiple taxonomies. Avoid large categories like "office supplies" or "electronics". Use specific ones, like "pen" or "printer".
    """
    name: str

Ürün Taksonomi Bilgileri

Temel olarak, bir ürünün tüm olası taksonomlarını çıkarmak ve mevcut ürünün yanı sıra hangi diğer ürünlerin satın alınması muhtemel olduğunu düşünmek istiyoruz.

@dataclasses.dataclass
class ProductTaxonomyInfo:
    """
    Taxonomy information for the product.

    Fields:
    - taxonomies: Taxonomies for the current product.
    - complementary_taxonomies: Think about when customers buy this product, what else they might need as complementary products. Put labels for these complentary products.
    """
    taxonomies: list[ProductTaxonomy]
    complementary_taxonomies: list[ProductTaxonomy]


taxonomy and complementary taxonomy


Her bir ürünün taksonomisi ve taksonomisi hakkında biraz bilgi istiyoruz ve bunu bilgi grafiklerini kullanarak ilgili ürünü bulmak için köprü olarak kullanabiliriz.

LLM Ekstraksiyon

Son olarak kullanacağızcocoindex.functions.ExtractByLlmÜrün detayından taksonomi ve ek taksonomi çıkarmak için.


taxonomy = data["detail"].transform(cocoindex.functions.ExtractByLlm(
            llm_spec=cocoindex.LlmSpec(
                api_type=cocoindex.LlmApiType.OPENAI, model="gpt-4.1"),
                output_type=ProductTaxonomyInfo))


Taxonomy extraction


Örneğin, LLM açıklamasını alırGelen PenTaksonomik olarak ortaya çıkmak içinGelen PenÖte yandan, insanlar satın aldığındaGelen PenOnlar da ilgilenebilirNotebook HakkındaTaksonomik taksim olarak da bilinir.


Ve daha sonra taksonomi ve ek taksonomi toplayıcıya toplayacağız.

with taxonomy['taxonomies'].row() as t:
    product_taxonomy.collect(id=cocoindex.GeneratedField.UUID, product_id=data["id"], taxonomy=t["name"])
with taxonomy['complementary_taxonomies'].row() as t:
    product_complementary_taxonomy.collect(id=cocoindex.GeneratedField.UUID, product_id=data["id"], taxonomy=t["name"])

Bilgi Grafiği Oluşturma

Temel kavramlar

Neo4j için tüm düğmelerin iki şeye ihtiyacı vardır:

  1. Etiket: Node türü. örneğin, Ürün, Taksonomi.
  2. Ana anahtar alanı: Düğmeyi benzersiz olarak tanımlayan alan. örneğin, Ürün düğmeleri için id.


CocoIndex prim anahtar alanını kullanır ve düğmeleri eşleştirir ve bunları çifteleştirir. eğer aynı prim anahtarı olan çok sayıda düğmeye sahipseniz, CocoIndex bunlardan yalnızca birini saklar.



Düğmeleri haritalamanın iki yolu vardır:

  1. Sadece düğmeye ait bir koleksiyoncu olduğunda, onu doğrudan Neo4j'e ihraç edebilirsiniz. örneğin Ürün.
  2. Düğmeye bağlanan ilişkiler için bir koleksiyoncu olduğunda, ilişki koleksiyoncusu'nda seçilen alanlardan düğmeleri haritada görebilirsiniz. bir düğme etiketini ve birincil anahtar alanını belirtmeniz gerekir.


Örneğin,

product_taxonomy.collect(id=cocoindex.GeneratedField.UUID, product_id=data["id"], taxonomy=t["name"])


Bir ilişki topluyor ve ilişkiden taksonomi düğmesi oluşturulur.

Neo4j bağlantısı:

conn_spec = cocoindex.add_auth_entry(
    "Neo4jConnection",
    cocoindex.storages.Neo4jConnection(
        uri="bolt://localhost:7687",
        user="neo4j",
        password="cocoindex",
))

ihracatÜrünNeo4j Hakkında

Ürün
product_node.export(
    "product_node",
    cocoindex.storages.Neo4j(
        connection=conn_spec,
        mapping=cocoindex.storages.Nodes(label="Product")
    ),
    primary_key_fields=["id"],
)


Bu, etiketli Neo4j düğmeleri ihraç ediyorProductO’ndanproduct_nodeBir koleksiyoner.

  • Neo4j node etiket ürün ilan eder. prim anahtar alanı olarak id tanımlar.
  • Ürün etiketli Neo4j düğmeleri için product_node collector alanından tüm alanları taşır.


ihracatTaxonomyNeo4j Hakkında

Taksonomik

Açık bir koleksiyoncu yokTaxonomyCevap: Bunlar birer parçadırproduct_taxonomyveproduct_complementary_taxonomyToplayıcılar ve alanlar taksonomik ekstraksiyon sırasında toplanır.


Bunları Neo4j düğmeleri olarak ihraç etmek için, önce ilan etmeliyizTaxonomyNöbetçiler

flow_builder.declare(
    cocoindex.storages.Neo4jDeclaration(
        connection=conn_spec,
        nodes_label="Taxonomy",
        primary_key_fields=["value"],
    )
)


Sonrasında ise ihracatproduct_taxonomyNeo4j ile ilgili yorumlar

product_taxonomy.export(
    "product_taxonomy",
    cocoindex.storages.Neo4j(
        connection=conn_spec,
        mapping=cocoindex.storages.Relationships(
            rel_type="PRODUCT_TAXONOMY",
            source=cocoindex.storages.NodeFromFields(
                label="Product",
                fields=[
                    cocoindex.storages.TargetFieldMapping(
                        source="product_id", target="id"),
                ]
            ),
            target=cocoindex.storages.NodeFromFields(
                label="Taxonomy",
                fields=[
                    cocoindex.storages.TargetFieldMapping(
                        source="taxonomy", target="value"),
                ]
            ),
        ),
    ),
    primary_key_fields=["id"],
)


Export taxonomy


Aynı şekilde ihracat yapabiliriz.product_complementary_taxonomyNeo4j ile ilgili yorumlar

    product_complementary_taxonomy.export(
        "product_complementary_taxonomy",
        cocoindex.storages.Neo4j(
            connection=conn_spec,
            mapping=cocoindex.storages.Relationships(
                rel_type="PRODUCT_COMPLEMENTARY_TAXONOMY",
                source=cocoindex.storages.NodeFromFields(
                    label="Product",
                    fields=[
                        cocoindex.storages.TargetFieldMapping(
                            source="product_id", target="id"),
                    ]
                ),
                target=cocoindex.storages.NodeFromFields(
                    label="Taxonomy",
                    fields=[
                        cocoindex.storages.TargetFieldMapping(
                            source="taxonomy", target="value"),
                    ]
                ),
            ),
        ),
        primary_key_fields=["id"],
    )


Export comlementary taxonomy



vecocoindex.storages.RelationshipsNeo4j’de ilişkileri haritaya nasıl koyacağınızı açıklıyor.


Bir ilişkide şunlar vardır:

  1. Bir kaynak düğmesi ve bir hedef düğmesi.
  2. Kaynağı ve hedefi birleştiren bir ilişki. Farklı ilişkilerin aynı kaynağı ve hedefi düğmeleri paylaşabileceğini unutmayın.


NodeFromFieldsBu alanlardan alınanentity_relationshipKoleksiyoncu ve yaratıcıTaxonomyNöbetçiler

Ana fonksiyon

Son olarak, akış için ana fonksiyon, CocoIndex akışını başlatır ve çalıştırır.

 @cocoindex.main_fn()
def _run():
    pass

if __name__ == "__main__":
    load_dotenv(override=True)
    _run()

indeksleri denetleyin ve test edin

Artık hepiniz hazırsınız!

  1. Install the dependencies:

    pip install -e .
    
  2. Run following commands to setup and update the index.

    python main.py cocoindex setup
    python main.py cocoindex update
    

    You'll see the index updates state in the terminal. For example, you'll see the following output:

    documents: 9 added, 0 removed, 0 updated
    
  3. (Optional) I used CocoInsight to troubleshoot the index generation and understand the data lineage of the pipeline. It is in free beta now, you can give it a try. Run following command to start CocoInsight:

    python3 main.py cocoindex server -c https://cocoindex.io
    


  4. And then open the url https://cocoindex.io/cocoinsight. It just connects to your local CocoIndex server, with Zero pipeline data retention.


CocoInsight


Bilgi Grafiği İnceleme

Bilgi grafiğini oluşturduktan sonra, Neo4j Browser'da oluşturduğunuz bilgi grafiğini keşfedebilirsiniz.


Dev ortamında, Neo4j tarayıcıya kimlik bilgilerini kullanarak bağlanabilirsiniz:

  • Kullanıcı Adı: Neo4j
  • şifre: cocoindex bizim docker compose config.yaml önceden yapılandırılmıştır.


Onu açabilirsinhttp://localhost:7474, ve tüm ilişkileri almak için aşağıdaki Cypher sorgusunu çalıştırın:

MATCH p=()-->() RETURN p


Knowledge Graph


Bizi Destek

Biz sürekli iyileştirme yapıyoruz ve daha fazla özellik ve örnek yakında geliyor. eğer bu makaleyi seviyorsanız, lütfen bize bir yıldız verin ⭐GitHub Repo HakkındaBize büyümemize yardımcı olmak için.


Okuduğunuz için teşekkürler!

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks